Correzione maschere

git-svn-id: svn://10.65.10.50/trunk@797 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-12-28 11:00:21 +00:00
parent 744cbac27b
commit 29d720bce7
25 changed files with 9714 additions and 9716 deletions

View File

@ -1,8 +1,8 @@
#ifndef __BA2_H
#define __BA2_H
int ba2100(int argc, char* argv[]);
int ba2300(int argc, char* argv[]);
#endif // __BA2_H
#ifndef __BA2_H
#define __BA2_H
int ba2100(int argc, char* argv[]);
int ba2300(int argc, char* argv[]);
#endif // __BA2_H

View File

@ -1,76 +1,76 @@
#include <default.url>
#define MENU_FILE_ALT TASK_MENUBAR+4000
#define M_FIL1_NEW MENU_FILE_ALT+101
#define M_FIL1_OPEN MENU_FILE_ALT+102
#define M_FIL1_SAVE MENU_FILE_ALT+103
#define M_FIL1_SAVEAS MENU_FILE_ALT+104
#define M_FIL1_QUIT MENU_FILE_ALT+105
MENU MENU_FILE_ALT
ITEM M_FIL1_NEW "~Nuovo"
ITEM M_FIL1_OPEN "~Apri"
ITEM M_FIL1_SAVE "~Salva"
ITEM M_FIL1_SAVEAS "Salva ~con Nome"
ITEM M_FIL1_QUIT "~Esci"
SEPARATOR
ITEM M_FILE_ABOUT "~Informazioni"
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM MENU_ITEM(11) "~Relazione"
SUBMENU BAR_ITEM(2) "~Intestazione"
SUBMENU BAR_ITEM(3) "~Corpo"
SUBMENU BAR_ITEM(4) "~Pie' di pagina"
MENU BAR_ITEM(2)
ITEM MENU_ITEM(21) "~Normale"
ITEM MENU_ITEM(22) "~Pari"
ITEM MENU_ITEM(23) "~Prima"
ITEM MENU_ITEM(24) "~Ultima"
MENU BAR_ITEM(3)
ITEM MENU_ITEM(31) "~Normale"
ITEM MENU_ITEM(32) "~Pari"
ITEM MENU_ITEM(33) "~Primo"
ITEM MENU_ITEM(34) "~Ultimo"
MENU BAR_ITEM(4)
ITEM MENU_ITEM(41) "~Normale"
ITEM MENU_ITEM(42) "~Pari"
ITEM MENU_ITEM(43) "~Primo"
ITEM MENU_ITEM(44) "~Ultimo"
MENUBAR TASK_MENUBAR + 1
MENU TASK_MENUBAR + 1
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 2
MENU TASK_MENUBAR + 2
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 3
MENU TASK_MENUBAR + 3
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 4
MENU TASK_MENUBAR + 4
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
#include <default.url>
#define MENU_FILE_ALT TASK_MENUBAR+4000
#define M_FIL1_NEW MENU_FILE_ALT+101
#define M_FIL1_OPEN MENU_FILE_ALT+102
#define M_FIL1_SAVE MENU_FILE_ALT+103
#define M_FIL1_SAVEAS MENU_FILE_ALT+104
#define M_FIL1_QUIT MENU_FILE_ALT+105
MENU MENU_FILE_ALT
ITEM M_FIL1_NEW "~Nuovo"
ITEM M_FIL1_OPEN "~Apri"
ITEM M_FIL1_SAVE "~Salva"
ITEM M_FIL1_SAVEAS "Salva ~con Nome"
ITEM M_FIL1_QUIT "~Esci"
SEPARATOR
ITEM M_FILE_ABOUT "~Informazioni"
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM MENU_ITEM(11) "~Relazione"
SUBMENU BAR_ITEM(2) "~Intestazione"
SUBMENU BAR_ITEM(3) "~Corpo"
SUBMENU BAR_ITEM(4) "~Pie' di pagina"
MENU BAR_ITEM(2)
ITEM MENU_ITEM(21) "~Normale"
ITEM MENU_ITEM(22) "~Pari"
ITEM MENU_ITEM(23) "~Prima"
ITEM MENU_ITEM(24) "~Ultima"
MENU BAR_ITEM(3)
ITEM MENU_ITEM(31) "~Normale"
ITEM MENU_ITEM(32) "~Pari"
ITEM MENU_ITEM(33) "~Primo"
ITEM MENU_ITEM(34) "~Ultimo"
MENU BAR_ITEM(4)
ITEM MENU_ITEM(41) "~Normale"
ITEM MENU_ITEM(42) "~Pari"
ITEM MENU_ITEM(43) "~Primo"
ITEM MENU_ITEM(44) "~Ultimo"
MENUBAR TASK_MENUBAR + 1
MENU TASK_MENUBAR + 1
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 2
MENU TASK_MENUBAR + 2
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 3
MENU TASK_MENUBAR + 3
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"
MENUBAR TASK_MENUBAR + 4
MENU TASK_MENUBAR + 4
SUBMENU MENU_FILE_ALT "~File"
SUBMENU MENU_EDIT "~Stampanti"

View File

@ -1,277 +1,277 @@
#include <applicat.h>
#include <form.h>
#include <msksheet.h>
#include <prefix.h>
#include <relation.h>
#include <utility.h>
#include <urldefid.h>
#include "ba2100.h"
class TForm_editor : public TApplication
{
TForm* _form;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG);
virtual void print();
static bool file_handler(TMask_field& f, KEY k);
bool edit_relation();
bool edit(char s, pagetype p);
public:
TForm_editor();
virtual ~TForm_editor();
};
TForm_editor::TForm_editor() : _form(NULL)
{}
TForm_editor::~TForm_editor()
{}
bool TForm_editor::create()
{
TApplication::create();
if (argc() < 3)
return error_box("Specificare il nome del profilo di stampa");
TFilename form(argv(2)); form.ext("frm");
const char mode = argc() > 3 ? toupper(argv(3)[1]) : 'M';
const bool crea = (mode == 'C') || !fexist(form);
if (crea)
{
TFilename base(form.left(3)); base.ext("frm");
if (!fexist(base))
return error_box("Non esiste il file %s", (const char*)base);
if (!fcopy(base, form))
return error_box("Impossibile copiare %s in %s", (const char*)base, (const char*)form);
}
if (!fexist(form))
return error_box("Non esiste il file %s", (const char*)form);
_form = new TForm(form);
enable_menu_item(M_FILE_PRINT);
return TRUE;
}
bool TForm_editor::destroy()
{
delete _form;
return TApplication::destroy();
}
bool TForm_editor::menu(MENU_TAG tag)
{
char sec = 'B';
pagetype pt = odd_page;
switch(tag)
{
case MENU_ITEM(11):
sec = 'R'; pt = odd_page; break;
case MENU_ITEM(21):
sec = 'H'; pt = odd_page; break;
case MENU_ITEM(22):
sec = 'H'; pt = even_page; break;
case MENU_ITEM(23):
sec = 'H'; pt = first_page; break;
case MENU_ITEM(24):
sec = 'H'; pt = last_page; break;
case MENU_ITEM(31):
sec = 'B'; pt = odd_page; break;
case MENU_ITEM(32):
sec = 'B'; pt = even_page; break;
case MENU_ITEM(33):
sec = 'B'; pt = first_page; break;
case MENU_ITEM(34):
sec = 'B'; pt = last_page; break;
case MENU_ITEM(41):
sec = 'F'; pt = odd_page; break;
case MENU_ITEM(42):
sec = 'F'; pt = even_page; break;
case MENU_ITEM(43):
sec = 'F'; pt = first_page; break;
case MENU_ITEM(44):
sec = 'F'; pt = last_page; break;
default:
break;
}
edit(sec, pt);
return TRUE;
}
void TForm_editor::print()
{
_form->print();
}
bool TForm_editor::file_handler(TMask_field& f, KEY k)
{
bool ok = TRUE;
if (k == K_TAB && f.dirty())
{
const char* d = prefhndl->description(f.get());
if (*d == '\0') ok = error_box("Nome di file o tabella errato");
f.mask().set(f.dlg()+1, d);
}
return ok;
}
bool TForm_editor::edit_relation()
{
TMask m("ba2100r");
TSheet_field& s = (TSheet_field&)m.field(F_ITEMS);
s.sheet_mask().set_handler(101, file_handler);
TRelation* & rel = _form->_relation;
TCursor* & cur = _form->_cursor;
if (rel)
{
rel->print_on(s.rows_array());
s.force_update();
s.disable_cell(0, 2); s.disable_cell(0, 4);
}
if (m.run() != K_ENTER || !m.dirty())
return FALSE;
if (rel)
{
delete cur; cur = NULL;
delete rel; rel = NULL;
}
TToken_string& r = s.row(0);
TString16 name = r.get(0);
if (name.not_empty())
{
int logicnum = atoi(name);
r.get(); // Skip description
int alias = 0, to = 0, key = r.get_int(2);
TString80 exp = r.get(4);
rel = (logicnum > 0) ? new TRelation(logicnum) : new TRelation(name);
cur = new TCursor(rel, exp, key);
for (int i = 1; i < s.items(); i++)
{
TToken_string& r = s.row(i);
name = r.get(0); logicnum = atoi(name);
to = name2log(r.get());
key = r.get_int();
alias = r.get_int();
exp = r.get();
const int l = exp.len();
for (int j = 0; j < l; j++)
if (exp[j] == ' ') exp[j] = '|';
if (logicnum > 0)
rel->add(logicnum, exp, key, to, alias); // join file
else
rel->add(name, exp, key, to, alias); // join table
}
}
return TRUE;
}
bool TForm_editor::edit(char s, pagetype t)
{
bool dirty = FALSE;
if (s == 'R')
dirty = edit_relation();
else
{
TString80 caption;
switch(s)
{
case 'F':
caption << "Pie' di pagina"; break;
case 'H':
caption << "Intestazione"; break;
default:
caption << "Corpo"; break;
}
switch(t)
{
case first_page:
caption << " della prima pagina"; break;
case even_page:
caption << " delle pagine pari"; break;
case last_page:
caption << " dell'ultima pagina"; break;
default:
caption << " standard"; break;
}
dirty = TRUE;
if (!_form->exist(s, t))
{
const KEY k = yesnocancel_box("La sezione %s non esiste: "
"si desidera ricopiare quella standard",
(const char*)caption);
if (k == K_ESC)
dirty = FALSE;
else
{
TPrint_section* sec = _form->exist(s, t, TRUE);
if (k == K_YES)
{
const TPrint_section* def = _form->exist(s, odd_page);
if (def) *sec = *def;
else dirty = FALSE;
}
}
}
if (dirty)
dirty = _form->section(s, t).edit(caption);
}
if (dirty && yesno_box("Salvare le modifiche?"))
{
CURSOR old = get_cursor(TASK_WIN);
set_cursor(TASK_WIN, CURSOR_WAIT);
const TFilename& n = _form->name();
TFilename bak(n); bak.ext("bak");
rename(n, bak);
ofstream out(n);
_form->print_on(out);
set_cursor(TASK_WIN, old);
}
return dirty;
}
int ba2100(int argc, char* argv[])
{
TForm_editor a;
a.run(argc, argv, "Parametrizzazione stampa");
return 0;
}
#include <applicat.h>
#include <form.h>
#include <msksheet.h>
#include <prefix.h>
#include <relation.h>
#include <utility.h>
#include <urldefid.h>
#include "ba2100.h"
class TForm_editor : public TApplication
{
TForm* _form;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG);
virtual void print();
static bool file_handler(TMask_field& f, KEY k);
bool edit_relation();
bool edit(char s, pagetype p);
public:
TForm_editor();
virtual ~TForm_editor();
};
TForm_editor::TForm_editor() : _form(NULL)
{}
TForm_editor::~TForm_editor()
{}
bool TForm_editor::create()
{
TApplication::create();
if (argc() < 3)
return error_box("Specificare il nome del profilo di stampa");
TFilename form(argv(2)); form.ext("frm");
const char mode = argc() > 3 ? toupper(argv(3)[1]) : 'M';
const bool crea = (mode == 'C') || !fexist(form);
if (crea)
{
TFilename base(form.left(3)); base.ext("frm");
if (!fexist(base))
return error_box("Non esiste il file %s", (const char*)base);
if (!fcopy(base, form))
return error_box("Impossibile copiare %s in %s", (const char*)base, (const char*)form);
}
if (!fexist(form))
return error_box("Non esiste il file %s", (const char*)form);
_form = new TForm(form);
enable_menu_item(M_FILE_PRINT);
return TRUE;
}
bool TForm_editor::destroy()
{
delete _form;
return TApplication::destroy();
}
bool TForm_editor::menu(MENU_TAG tag)
{
char sec = 'B';
pagetype pt = odd_page;
switch(tag)
{
case MENU_ITEM(11):
sec = 'R'; pt = odd_page; break;
case MENU_ITEM(21):
sec = 'H'; pt = odd_page; break;
case MENU_ITEM(22):
sec = 'H'; pt = even_page; break;
case MENU_ITEM(23):
sec = 'H'; pt = first_page; break;
case MENU_ITEM(24):
sec = 'H'; pt = last_page; break;
case MENU_ITEM(31):
sec = 'B'; pt = odd_page; break;
case MENU_ITEM(32):
sec = 'B'; pt = even_page; break;
case MENU_ITEM(33):
sec = 'B'; pt = first_page; break;
case MENU_ITEM(34):
sec = 'B'; pt = last_page; break;
case MENU_ITEM(41):
sec = 'F'; pt = odd_page; break;
case MENU_ITEM(42):
sec = 'F'; pt = even_page; break;
case MENU_ITEM(43):
sec = 'F'; pt = first_page; break;
case MENU_ITEM(44):
sec = 'F'; pt = last_page; break;
default:
break;
}
edit(sec, pt);
return TRUE;
}
void TForm_editor::print()
{
_form->print();
}
bool TForm_editor::file_handler(TMask_field& f, KEY k)
{
bool ok = TRUE;
if (k == K_TAB && f.dirty())
{
const char* d = prefhndl->description(f.get());
if (*d == '\0') ok = error_box("Nome di file o tabella errato");
f.mask().set(f.dlg()+1, d);
}
return ok;
}
bool TForm_editor::edit_relation()
{
TMask m("ba2100r");
TSheet_field& s = (TSheet_field&)m.field(F_ITEMS);
s.sheet_mask().set_handler(101, file_handler);
TRelation* & rel = _form->_relation;
TCursor* & cur = _form->_cursor;
if (rel)
{
rel->print_on(s.rows_array());
s.force_update();
s.disable_cell(0, 2); s.disable_cell(0, 5);
}
if (m.run() != K_ENTER || !m.dirty())
return FALSE;
if (rel)
{
delete cur; cur = NULL;
delete rel; rel = NULL;
}
TToken_string& r = s.row(0);
TString16 name = r.get(0);
if (name.not_empty())
{
int logicnum = atoi(name);
r.get(); // Skip description
int alias = 0, to = 0, key = r.get_int(2);
TString80 exp = r.get(4);
rel = (logicnum > 0) ? new TRelation(logicnum) : new TRelation(name);
cur = new TCursor(rel, exp, key);
for (int i = 1; i < s.items(); i++)
{
TToken_string& r = s.row(i);
name = r.get(0); logicnum = atoi(name);
to = name2log(r.get());
key = r.get_int();
alias = r.get_int();
exp = r.get();
const int l = exp.len();
for (int j = 0; j < l; j++)
if (exp[j] == ' ') exp[j] = '|';
if (logicnum > 0)
rel->add(logicnum, exp, key, to, alias); // join file
else
rel->add(name, exp, key, to, alias); // join table
}
}
return TRUE;
}
bool TForm_editor::edit(char s, pagetype t)
{
bool dirty = FALSE;
if (s == 'R')
dirty = edit_relation();
else
{
TString80 caption;
switch(s)
{
case 'F':
caption << "Pie' di pagina"; break;
case 'H':
caption << "Intestazione"; break;
default:
caption << "Corpo"; break;
}
switch(t)
{
case first_page:
caption << " della prima pagina"; break;
case even_page:
caption << " delle pagine pari"; break;
case last_page:
caption << " dell'ultima pagina"; break;
default:
caption << " standard"; break;
}
dirty = TRUE;
if (!_form->exist(s, t))
{
const KEY k = yesnocancel_box("La sezione %s non esiste: "
"si desidera ricopiare quella standard",
(const char*)caption);
if (k == K_ESC)
dirty = FALSE;
else
{
TPrint_section* sec = _form->exist(s, t, TRUE);
if (k == K_YES)
{
const TPrint_section* def = _form->exist(s, odd_page);
if (def) *sec = *def;
else dirty = FALSE;
}
}
}
if (dirty)
dirty = _form->section(s, t).edit(caption);
}
if (dirty && yesno_box("Salvare le modifiche?"))
{
CURSOR old = get_cursor(TASK_WIN);
set_cursor(TASK_WIN, CURSOR_WAIT);
const TFilename& n = _form->name();
TFilename bak(n); bak.ext("bak");
rename(n, bak);
ofstream out(n);
_form->print_on(out);
set_cursor(TASK_WIN, old);
}
return dirty;
}
int ba2100(int argc, char* argv[])
{
TForm_editor a;
a.run(argc, argv, "Parametrizzazione stampa");
return 0;
}

View File

@ -1,31 +1,31 @@
#define F_CLASS 101
#define F_KEY 102
#define F_Y 103
#define F_X 104
#define F_WIDTH 105
#define F_HEIGHT 106
#define F_PROMPT 107
#define F_HIDDEN 108
#define F_DISABLED 109
#define F_AUTOMAGIC 110
#define F_PICTURE 111
#define F_FIELD 113
#define F_FIELD2 114
#define F_GROUP 130
#define F_GROUP1 131
#define F_GROUP2 132
#define F_GROUP3 133
#define F_GROUP4 134
#define F_GROUP5 135
#define F_GROUP6 136
#define F_GROUP7 137
#define F_GROUP8 138
#define F_GROUP9 139
#define F_GROUP10 140
#define F_GROUP11 141
#define F_GROUP12 142
#define F_ITEMS 200
#define F_DECIMALS 206
#define F_CLASS 101
#define F_KEY 102
#define F_Y 103
#define F_X 104
#define F_WIDTH 105
#define F_HEIGHT 106
#define F_PROMPT 107
#define F_HIDDEN 108
#define F_DISABLED 109
#define F_AUTOMAGIC 110
#define F_PICTURE 111
#define F_FIELD 113
#define F_FIELD2 114
#define F_GROUP 130
#define F_GROUP1 131
#define F_GROUP2 132
#define F_GROUP3 133
#define F_GROUP4 134
#define F_GROUP5 135
#define F_GROUP6 136
#define F_GROUP7 137
#define F_GROUP8 138
#define F_GROUP9 139
#define F_GROUP10 140
#define F_GROUP11 141
#define F_GROUP12 142
#define F_ITEMS 200
#define F_DECIMALS 206

View File

@ -1,214 +1,214 @@
#include "ba2100.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "CAMPO DI STAMPA" -1 -1 60 14
LIST F_CLASS 10
BEGIN
PROMPT 1 1 "Tipo "
FLAGS "DG"
ITEM "STRINGA|Testo" MESSAGE HIDE,2@|SHOW,F_HEIGHT|HIDE,F_ITEMS
ITEM "NUMERO|Numero" MESSAGE SHOW,2@|HIDE,F_HEIGHT|HIDE,F_ITEMS
ITEM "DATA|Data" MESSAGE HIDE,2@|HIDE,F_HEIGHT|HIDE,F_ITEMS
ITEM "LISTA|Lista" MESSAGE HIDE,2@|HIDE,F_HEIGHT|SHOW,F_ITEMS
END
STRING F_KEY 80 60
BEGIN
PROMPT 1 2 "Descrizione "
HELP "Descrizione del campo da configurare"
END
NUMBER F_Y 3
BEGIN
PROMPT 1 3 "Riga "
HELP "Riga in cui stampare"
END
NUMBER F_X 3
BEGIN
PROMPT 24 3 "Colonna "
HELP "Colonna in cui stampare"
END
NUMBER F_WIDTH 3
BEGIN
PROMPT 1 4 "Larghezza "
HELP "Lunghezza massima da stampare"
END
NUMBER F_HEIGHT 2
BEGIN
PROMPT 24 4 "Altezza "
HELP "Righe massime su cui stampare"
END
NUMBER F_DECIMALS 2
BEGIN
PROMPT 24 4 "Decimali "
HELP "Numero di decimali"
MESSAGE COPY,F_HEIGHT
GROUP 2
END
STRING F_PROMPT 80 60
BEGIN
PROMPT 1 5 "Testo "
HELP "Eventuale testo fisso da stampare"
END
STRING F_PICTURE 80 40
BEGIN
PROMPT 1 6 "Formato "
HELP "Formato di stampa (vedere codici sul manuale)"
END
STRING F_FIELD 40
BEGIN
PROMPT 1 7 "Campo su file "
HELP "Nome del campo su file"
END
STRING F_FIELD2 40
BEGIN
PROMPT 1 8 "II campo "
HELP "Nome del campo su file da utilizzare se il primo e' vuoto"
END
BOOLEAN F_HIDDEN
BEGIN
PROMPT 60 6 "Nascosto"
HELP "Il campo va elaborato ma non stampato"
END
BOOLEAN F_DISABLED
BEGIN
PROMPT 60 7 "Disabilitato"
HELP "Il campo viene completamente ignorato e quindi nemmeno stampato"
END
BOOLEAN F_AUTOMAGIC
BEGIN
PROMPT 60 8 "Automatico"
HELP "Il campo viene calcolato automaticamente"
END
GROUPBOX F_GROUP 78 3
BEGIN
PROMPT 1 9 "Gruppi di stampa"
END
BOOLEAN F_GROUP1
BEGIN
PROMPT 4 10 "1"
END
BOOLEAN F_GROUP2
BEGIN
PROMPT 10 10 "2"
END
BOOLEAN F_GROUP3
BEGIN
PROMPT 16 10 "3"
END
BOOLEAN F_GROUP4
BEGIN
PROMPT 22 10 "4"
END
BOOLEAN F_GROUP5
BEGIN
PROMPT 28 10 "5"
END
BOOLEAN F_GROUP6
BEGIN
PROMPT 34 10 "6"
END
BOOLEAN F_GROUP7
BEGIN
PROMPT 40 10 "7"
END
BOOLEAN F_GROUP8
BEGIN
PROMPT 46 10 "8"
END
BOOLEAN F_GROUP9
BEGIN
PROMPT 52 10 "9"
END
BOOLEAN F_GROUP10
BEGIN
PROMPT 58 10 "10"
END
BOOLEAN F_GROUP11
BEGIN
PROMPT 64 10 "11"
END
BOOLEAN F_GROUP12
BEGIN
PROMPT 70 10 "12"
END
SPREADSHEET F_ITEMS
BEGIN
PROMPT 0 12 "Spreadsheet"
ITEM "Codice@8"
ITEM "Testo@32"
ITEM "Messaggio@80"
END
ENDPAGE
ENDMASK
PAGE "Spreadsheet" -1 -1 46 6
STRING 101 8
BEGIN
PROMPT 1 1 "Codice "
END
STRING 102 32
BEGIN
PROMPT 1 2 "Testo "
FLAGS "_"
END
STRING 103 80 32
BEGIN
PROMPT 1 3 "Messaggio "
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
#include "ba2100.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "CAMPO DI STAMPA" -1 -1 60 14
LIST F_CLASS 10
BEGIN
PROMPT 1 1 "Tipo "
FLAGS "DG"
ITEM "STRINGA|Testo" MESSAGE HIDE,2@|SHOW,F_HEIGHT|HIDE,F_ITEMS
ITEM "NUMERO|Numero" MESSAGE SHOW,2@|HIDE,F_HEIGHT|HIDE,F_ITEMS
ITEM "DATA|Data" MESSAGE HIDE,2@|HIDE,F_HEIGHT|HIDE,F_ITEMS
ITEM "LISTA|Lista" MESSAGE HIDE,2@|HIDE,F_HEIGHT|SHOW,F_ITEMS
END
STRING F_KEY 80 60
BEGIN
PROMPT 1 2 "Descrizione "
HELP "Descrizione del campo da configurare"
END
NUMBER F_Y 3
BEGIN
PROMPT 1 3 "Riga "
HELP "Riga in cui stampare"
END
NUMBER F_X 3
BEGIN
PROMPT 24 3 "Colonna "
HELP "Colonna in cui stampare"
END
NUMBER F_WIDTH 3
BEGIN
PROMPT 1 4 "Larghezza "
HELP "Lunghezza massima da stampare"
END
NUMBER F_HEIGHT 2
BEGIN
PROMPT 24 4 "Altezza "
HELP "Righe massime su cui stampare"
END
NUMBER F_DECIMALS 2
BEGIN
PROMPT 24 4 "Decimali "
HELP "Numero di decimali"
MESSAGE COPY,F_HEIGHT
GROUP 2
END
STRING F_PROMPT 80 60
BEGIN
PROMPT 1 5 "Testo "
HELP "Eventuale testo fisso da stampare"
END
STRING F_PICTURE 80 40
BEGIN
PROMPT 1 6 "Formato "
HELP "Formato di stampa (vedere codici sul manuale)"
END
STRING F_FIELD 40
BEGIN
PROMPT 1 7 "Campo su file "
HELP "Nome del campo su file"
END
STRING F_FIELD2 40
BEGIN
PROMPT 1 8 "II campo "
HELP "Nome del campo su file da utilizzare se il primo e' vuoto"
END
BOOLEAN F_HIDDEN
BEGIN
PROMPT 60 6 "Nascosto"
HELP "Il campo va elaborato ma non stampato"
END
BOOLEAN F_DISABLED
BEGIN
PROMPT 60 7 "Disabilitato"
HELP "Il campo viene completamente ignorato e quindi nemmeno stampato"
END
BOOLEAN F_AUTOMAGIC
BEGIN
PROMPT 60 8 "Automatico"
HELP "Il campo viene calcolato automaticamente"
END
GROUPBOX F_GROUP 78 3
BEGIN
PROMPT 1 9 "Gruppi di stampa"
END
BOOLEAN F_GROUP1
BEGIN
PROMPT 4 10 "1"
END
BOOLEAN F_GROUP2
BEGIN
PROMPT 10 10 "2"
END
BOOLEAN F_GROUP3
BEGIN
PROMPT 16 10 "3"
END
BOOLEAN F_GROUP4
BEGIN
PROMPT 22 10 "4"
END
BOOLEAN F_GROUP5
BEGIN
PROMPT 28 10 "5"
END
BOOLEAN F_GROUP6
BEGIN
PROMPT 34 10 "6"
END
BOOLEAN F_GROUP7
BEGIN
PROMPT 40 10 "7"
END
BOOLEAN F_GROUP8
BEGIN
PROMPT 46 10 "8"
END
BOOLEAN F_GROUP9
BEGIN
PROMPT 52 10 "9"
END
BOOLEAN F_GROUP10
BEGIN
PROMPT 58 10 "10"
END
BOOLEAN F_GROUP11
BEGIN
PROMPT 64 10 "11"
END
BOOLEAN F_GROUP12
BEGIN
PROMPT 70 10 "12"
END
SPREADSHEET F_ITEMS
BEGIN
PROMPT 0 12 "Spreadsheet"
ITEM "Codice@8"
ITEM "Testo@32"
ITEM "Messaggio@80"
END
ENDPAGE
ENDMASK
PAGE "Spreadsheet" -1 -1 46 6
STRING 101 8
BEGIN
PROMPT 1 1 "Codice "
END
STRING 102 32
BEGIN
PROMPT 1 2 "Testo "
FLAGS "_"
END
STRING 103 80 32
BEGIN
PROMPT 1 3 "Messaggio "
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE

View File

@ -1,80 +1,80 @@
#include "ba2100.h"
PAGE "RELAZIONE" -1 -1 78 12
SPREADSHEET F_ITEMS 0 9
BEGIN
PROMPT 0 1 "Spreadsheet"
ITEM "File@4"
ITEM "Descrizione@40"
ITEM "Join@4"
ITEM "Chiave@2"
ITEM "Alias@3"
ITEM "Espressione@40"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
PAGE "Spreadsheet" -1 -1 60 8
STRING 101 4
BEGIN
PROMPT 1 1 "File "
FLAGS "U"
CHECKTYPE REQUIRED
END
STRING 102 40
BEGIN
PROMPT 16 1 ""
FLAGS "D"
END
STRING 103 4
BEGIN
PROMPT 1 2 "Join "
FLAGS "U"
END
NUMBER 104 3
BEGIN
PROMPT 1 3 "Chiave "
FLAGS "U"
END
NUMBER 105 3
BEGIN
PROMPT 1 4 "Alias "
FLAGS "U"
END
STRING 106 40
BEGIN
PROMPT 1 5 "Espr. "
FLAGS "U"
CHECKTYPE REQUIRED
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
#include "ba2100.h"
PAGE "RELAZIONE" -1 -1 78 12
SPREADSHEET F_ITEMS 0 9
BEGIN
PROMPT 0 1 "Spreadsheet"
ITEM "File@4"
ITEM "Descrizione@40"
ITEM "Join@4"
ITEM "Chiave@2"
ITEM "Alias@3"
ITEM "Espressione@40"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
PAGE "Spreadsheet" -1 -1 60 8
STRING 101 4
BEGIN
PROMPT 1 1 "File "
FLAGS "U"
CHECKTYPE REQUIRED
END
STRING 102 40
BEGIN
PROMPT 16 1 ""
FLAGS "D"
END
STRING 103 4
BEGIN
PROMPT 1 2 "Join "
FLAGS "U"
END
NUMBER 104 3
BEGIN
PROMPT 1 3 "Chiave "
FLAGS "U"
END
NUMBER 105 3
BEGIN
PROMPT 1 4 "Alias "
FLAGS "U"
END
STRING 106 40
BEGIN
PROMPT 1 5 "Espr. "
FLAGS "U"
CHECKTYPE REQUIRED
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE

View File

@ -1,23 +1,23 @@
#include "ba2100.h"
PAGE "SEZIONE DI STAMPA" -1 -1 30 5
NUMBER F_HEIGHT 2
BEGIN
PROMPT 1 1 "Altezza "
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT -12 -1 ""
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "ba2100.h"
PAGE "SEZIONE DI STAMPA" -1 -1 30 5
NUMBER F_HEIGHT 2
BEGIN
PROMPT 1 1 "Altezza "
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT -12 -1 ""
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ BEGIN
PROMPT 4 1 "Ditta "
HELP "Codice ditta a cui si riferisce la delega"
FIELD CODTAB[1,5]
FLAGS "FR"
FLAGS "FRZ"
KEY 1
USE LF_NDITTE KEY 1
INPUT CODDITTA F_CODDITTA
@ -138,6 +138,7 @@ BEGIN
PROMPT 4 10 "Importo "
FIELD R0
FLAGS "R"
PICTURE "."
HELP "Importo versato"
END

View File

@ -1,318 +1,318 @@
#include "batbiva.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Codici IVA" -1 -1 78 19
STRING FLD_TABIVA_CODTAB 4
BEGIN
PROMPT 3 1 "Codice "
FIELD CODTAB
KEY 1
USE %IVA
FLAGS "U"
INPUT CODTAB FLD_TABIVA_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT FLD_TABIVA_CODTAB CODTAB
OUTPUT FLD_TABIVA_S0 S0
HELP "Inserire il codice IVA"
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
END
STRING FLD_TABIVA_S0 50
BEGIN
PROMPT 3 2 "Descrizione "
FIELD S0
KEY 2
USE %IVA KEY 2
INPUT S0 FLD_TABIVA_S0
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
COPY OUTPUT FLD_TABIVA_CODTAB
HELP "Inserire la descrizione del codice IVA"
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END
LIST LST_TABIVA_S1 2 22
BEGIN
PROMPT 3 3 "Tipo codice "
FIELD S1
HELP "Indicare il tipo di codice IVA"
ITEM " |Regime IVA normale"
MESSAGE ENABLE,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "VE|Ricavi da ventilare"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0|CLEAR,FLD_TABIVA_I3
MESSAGE CLEAR,FLD_TABIVA_I4|CLEAR,FLD_TABIVA_S6
ITEM "ES|Operazioni esenti"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "NI|Non imponibili"
MESSAGE CLEAR,FLD_TABIVA_R0|ENABLE,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "NS|Non soggetti"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
END
STRING FLD_TABIVA_S6 4
BEGIN
PROMPT 39 3 "C.IVA a cui ventilare "
FLAGS "U"
FIELD S6
COPY USE FLD_TABIVA_CODTAB
INPUT CODTAB FLD_TABIVA_S6
COPY DISPLAY FLD_TABIVA_CODTAB
OUTPUT FLD_TABIVA_S6 CODTAB
CHECKTYPE NORMAL
VALIDATE ZEROFILL_FUNC 2
HELP "Inserire il codice iva a cui ventilare l'imposta"
END
NUMBER FLD_TABIVA_R0 6 2
BEGIN
PROMPT 3 4 "Aliquota "
FIELD R0
FLAGS "R"
HELP "Inserire la percentuale di imposta"
WARNING "Almeno uno dei campi tra aliquota tipo e codice a cui ventilare deve essere specificato"
VALIDATE ONEREQ_FUNC 3 FLD_TABIVA_R0 FLD_TABIVA_S6 LST_TABIVA_S1
END
NUMBER FLD_TABIVA_I0 2
BEGIN
PROMPT 39 4 "Perc.IVA teorica "
FIELD I0
HELP "Inserire la percentuale teorica dell'imposta"
END
GROUPBOX DLG_NULL 40 4
BEGIN
PROMPT 3 5 "Colonne per allegati imponibili"
END
GROUPBOX DLG_NULL 25 4
BEGIN
PROMPT 44 5 "Indicatori mod. 101/102"
END
LIST FLD_TABIVA_S7 1 26
BEGIN
PROMPT 4 6 "Clienti "
FIELD S7
HELP "Inserire il numero della colonna degli allegati clienti relativa all'imposta"
ITEM " |Non in allegato"
ITEM "1|Imponibili"
ITEM "3|Non imponibili"
END
LIST FLD_TABIVA_S8 1 26
BEGIN
PROMPT 4 7 "Fornitori "
FIELD S8
HELP "Inserire il numero della colonna degli allegati fornitori relativa all'imposta"
ITEM " |Non in allegato"
ITEM "1|Imponibili"
ITEM "3|Senza applicaz.imposta"
ITEM "4|Non imponibili"
END
BOOLEAN CHK_TABIVA_B0
BEGIN
PROMPT 50 6 "Clienti"
FIELD B0
HELP "Indicare se il codice deve comparire nel modello 101"
END
BOOLEAN FLD_TABIVA_B1
BEGIN
PROMPT 50 7 "Fornitori"
FIELD B1
HELP "Indicare se il codice deve comparire nel modello 102"
END
LIST FLD_TABIVA_I3 3 6
BEGIN
PROMPT 3 10 "Riga vendite IVA11 per op.esenti e non imp. "
FIELD I3
HELP "Indicare il codice riga per operazioni di vendita es. e non imp. del mod.101"
ITEM " |No"
ITEM "1|B1"
ITEM "2|B2"
ITEM "3|B3"
END
LIST FLD_TABIVA_I4 3 6
BEGIN
PROMPT 3 11 "Riga acquisti IVA11 per op.esenti e non imp. "
FIELD I4
HELP "Indicare il n. di riga per operazioni di acquisto es. e non imp. del mod.101"
ITEM " |No"
ITEM "14|B14"
END
LIST LST_TABIVA_S3 1 33
BEGIN
PROMPT 3 12 "Gestione plafond "
FIELD S3
HELP "Indicare il tipo di gestione di plafond"
ITEM " |Regime normale"
ITEM "1|Oper. relative art.8"
ITEM "2|Oper. relative art.8bis"
ITEM "3|Oper. relative art.9"
END
LIST LST_TABIVA_S4 1 45
BEGIN
PROMPT 3 13 "Regime agricolo "
FIELD S4
HELP "Indicare il tipo di gestione per regime agricolo"
ITEM " |Regime normale"
ITEM "1|Vendite regime agricolo"
ITEM "2|Vendite accessorie/Acquisti non agricoli"
ITEM "3|Vendite per conferimenti"
END
LIST LST_TABIVA_S5 1 33
BEGIN
PROMPT 3 14 "Ag. viaggio/turismo "
FIELD S5
HELP "Indicare il tipo di gestione per agenzie viaggio/turismo"
ITEM " |Regime normale"
ITEM "1|Operazioni interno CEE"
ITEM "2|Operazioni fuori CEE"
ITEM "3|Vendite miste CEE"
ITEM "4|Acquisti misti parte CEE"
ITEM "5|Acquisti misti parte fuori CEE"
END
BOOLEAN CHK_TABIVA_S9
BEGIN
PROMPT 3 16 "Codice per calcolo rimborso infrannuale"
FIELD B3
HELP "Indicare se il codice vale per il calcolo del rimborso infrannuale"
END
BOOLEAN FLD_SOSPESO_B2
BEGIN
PROMPT 3 17 "Codice IVA sospeso"
FIELD B2
HELP "Indicare se il codice iva e' sospeso"
END
ENDPAGE
ENDMASK
#include "batbiva.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Codici IVA" -1 -1 78 19
STRING FLD_TABIVA_CODTAB 4
BEGIN
PROMPT 3 1 "Codice "
FIELD CODTAB
KEY 1
USE %IVA
FLAGS "U"
INPUT CODTAB FLD_TABIVA_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT FLD_TABIVA_CODTAB CODTAB
OUTPUT FLD_TABIVA_S0 S0
HELP "Inserire il codice IVA"
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
END
STRING FLD_TABIVA_S0 50
BEGIN
PROMPT 3 2 "Descrizione "
FIELD S0
KEY 2
USE %IVA KEY 2
INPUT S0 FLD_TABIVA_S0
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
COPY OUTPUT FLD_TABIVA_CODTAB
HELP "Inserire la descrizione del codice IVA"
CHECKTYPE REQUIRED
WARNING "Manca la descrizione"
END
LIST LST_TABIVA_S1 2 22
BEGIN
PROMPT 3 3 "Tipo codice "
FIELD S1
HELP "Indicare il tipo di codice IVA"
ITEM " |Regime IVA normale"
MESSAGE ENABLE,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "VE|Ricavi da ventilare"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0|CLEAR,FLD_TABIVA_I3
MESSAGE CLEAR,FLD_TABIVA_I4|CLEAR,FLD_TABIVA_S6
ITEM "ES|Operazioni esenti"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "NI|Non imponibili"
MESSAGE CLEAR,FLD_TABIVA_R0|ENABLE,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
ITEM "NS|Non soggetti"
MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0
MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4
MESSAGE ENABLE,FLD_TABIVA_S6
END
STRING FLD_TABIVA_S6 4
BEGIN
PROMPT 39 3 "C.IVA a cui ventilare "
FLAGS "U"
FIELD S6
COPY USE FLD_TABIVA_CODTAB
INPUT CODTAB FLD_TABIVA_S6
COPY DISPLAY FLD_TABIVA_CODTAB
OUTPUT FLD_TABIVA_S6 CODTAB
CHECKTYPE NORMAL
VALIDATE ZEROFILL_FUNC 2
HELP "Inserire il codice iva a cui ventilare l'imposta"
END
NUMBER FLD_TABIVA_R0 6 2
BEGIN
PROMPT 3 4 "Aliquota "
FIELD R0
FLAGS "R"
HELP "Inserire la percentuale di imposta"
WARNING "Deve essere specificato almeno uno dei campi seguenti: aliquota, tipo, codice a cui ventilare"
VALIDATE ONEREQ_FUNC 3 FLD_TABIVA_R0 FLD_TABIVA_S6 LST_TABIVA_S1
END
NUMBER FLD_TABIVA_I0 2
BEGIN
PROMPT 39 4 "Perc.IVA teorica "
FIELD I0
HELP "Inserire la percentuale teorica dell'imposta"
END
GROUPBOX DLG_NULL 40 4
BEGIN
PROMPT 3 5 "Colonne per allegati imponibili"
END
GROUPBOX DLG_NULL 25 4
BEGIN
PROMPT 44 5 "Indicatori mod. 101/102"
END
LIST FLD_TABIVA_S7 1 26
BEGIN
PROMPT 4 6 "Clienti "
FIELD S7
HELP "Inserire il numero della colonna degli allegati clienti relativa all'imposta"
ITEM " |Non in allegato"
ITEM "1|Imponibili"
ITEM "3|Non imponibili"
END
LIST FLD_TABIVA_S8 1 26
BEGIN
PROMPT 4 7 "Fornitori "
FIELD S8
HELP "Inserire il numero della colonna degli allegati fornitori relativa all'imposta"
ITEM " |Non in allegato"
ITEM "1|Imponibili"
ITEM "3|Senza applicaz.imposta"
ITEM "4|Non imponibili"
END
BOOLEAN CHK_TABIVA_B0
BEGIN
PROMPT 50 6 "Clienti"
FIELD B0
HELP "Indicare se il codice deve comparire nel modello 101"
END
BOOLEAN FLD_TABIVA_B1
BEGIN
PROMPT 50 7 "Fornitori"
FIELD B1
HELP "Indicare se il codice deve comparire nel modello 102"
END
LIST FLD_TABIVA_I3 3 6
BEGIN
PROMPT 3 10 "Riga vendite IVA11 per op.esenti e non imp. "
FIELD I3
HELP "Indicare il codice riga per operazioni di vendita es. e non imp. del mod.101"
ITEM " |No"
ITEM "1|B1"
ITEM "2|B2"
ITEM "3|B3"
END
LIST FLD_TABIVA_I4 3 6
BEGIN
PROMPT 3 11 "Riga acquisti IVA11 per op.esenti e non imp. "
FIELD I4
HELP "Indicare il n. di riga per operazioni di acquisto es. e non imp. del mod.101"
ITEM " |No"
ITEM "14|B14"
END
LIST LST_TABIVA_S3 1 33
BEGIN
PROMPT 3 12 "Gestione plafond "
FIELD S3
HELP "Indicare il tipo di gestione di plafond"
ITEM " |Regime normale"
ITEM "1|Oper. relative art.8"
ITEM "2|Oper. relative art.8bis"
ITEM "3|Oper. relative art.9"
END
LIST LST_TABIVA_S4 1 45
BEGIN
PROMPT 3 13 "Regime agricolo "
FIELD S4
HELP "Indicare il tipo di gestione per regime agricolo"
ITEM " |Regime normale"
ITEM "1|Vendite regime agricolo"
ITEM "2|Vendite accessorie/Acquisti non agricoli"
ITEM "3|Vendite per conferimenti"
END
LIST LST_TABIVA_S5 1 33
BEGIN
PROMPT 3 14 "Ag. viaggio/turismo "
FIELD S5
HELP "Indicare il tipo di gestione per agenzie viaggio/turismo"
ITEM " |Regime normale"
ITEM "1|Operazioni interno CEE"
ITEM "2|Operazioni fuori CEE"
ITEM "3|Vendite miste CEE"
ITEM "4|Acquisti misti parte CEE"
ITEM "5|Acquisti misti parte fuori CEE"
END
BOOLEAN CHK_TABIVA_S9
BEGIN
PROMPT 3 16 "Codice per calcolo rimborso infrannuale"
FIELD B3
HELP "Indicare se il codice vale per il calcolo del rimborso infrannuale"
END
BOOLEAN FLD_SOSPESO_B2
BEGIN
PROMPT 3 17 "Codice IVA sospeso"
FIELD B2
HELP "Indicare se il codice iva e' sospeso"
END
ENDPAGE
ENDMASK

View File

@ -1,53 +1,53 @@
#include "batblng.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Tabella lingue" -1 -1 78 8
STRING F_CODICE 1
BEGIN
PROMPT 4 2 "Codice "
FIELD CODTAB
FLAGS "U"
KEY 1
USE %LNG
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT F_CODICE CODTAB
OUTPUT F_DESCR S0
CHECKTYPE REQUIRED
END
STRING F_DESCR 50
BEGIN
PROMPT 4 4 "Descrizione "
FIELD LF_TABCOM->S0
KEY 2
USE %LNG KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione @50" S0
DISPLAY "Codice" CODTAB
OUTPUT F_CODICE CODTAB
OUTPUT F_DESCR S0
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK
#include "batblng.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Tabella lingue" -1 -1 78 8
STRING F_CODICE 1
BEGIN
PROMPT 4 2 "Codice "
FIELD CODTAB
FLAGS "U"
KEY 1
USE %LNG
INPUT CODTAB F_CODICE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT F_CODICE CODTAB
OUTPUT F_DESCR S0
CHECKTYPE REQUIRED
END
STRING F_DESCR 50
BEGIN
PROMPT 4 4 "Descrizione "
FIELD LF_TABCOM->S0
KEY 2
USE %LNG KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione @50" S0
DISPLAY "Codice" CODTAB
OUTPUT F_CODICE CODTAB
OUTPUT F_DESCR S0
CHECKTYPE REQUIRED
END
ENDPAGE
ENDMASK

View File

@ -1,343 +1,343 @@
#include <relapp.h>
#include <pconti.h>
#include "cg0.h"
#include "cg0100.h"
#define ATTIVITA 1
#define PASSIVITA 2
#define COSTI 3
#define RICAVI 4
#define ORDINE 5
class CG0100_application : public TRelation_application
{
TMask* _msk;
TRelation *_rel;
TLocalisamfile* _saldi;
TLocalisamfile* _tabcom;
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
virtual bool protected_record(TRectype &rec);
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
virtual int write(const TMask& m);
virtual int rewrite(const TMask & m);
virtual int read(TMask& m);
public:
virtual TRelation* get_relation() const {return _rel;}
CG0100_application() {}
};
HIDDEN inline CG0100_application & app() { return (CG0100_application &) main_app();}
int CG0100_application::read(TMask& m)
{
const TRelation *r = get_relation();
m.autoload(r);
if (m.get(FLD_CM1_LETTIVD).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVD, sezivd + 5);
}
if (m.get(FLD_CM1_LETTIVDOPP).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
}
return NOERR;
}
int CG0100_application::rewrite(const TMask& m)
{
TRelation *r = get_relation();
m.autosave(r);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
TString16 sez;
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
return r->rewrite();
}
int CG0100_application::write(const TMask& m)
{
TRelation *r = get_relation();
TString16 sez;
m.autosave(r);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
return r->write();
}
// Controlla se puo' essere effettuata la cancellazione di un conto
bool CG0100_application::protected_record(TRectype &rec)
{
TMask* m = get_mask(MODE_MOD);
TLocalisamfile& pconti = _rel->lfile();
const int gruppo = atoi(m->get(FLD_CM1_GRUPPO));
const int conto = atoi(m->get(FLD_CM1_CONTO));
const long sottoc = atol(m->get(FLD_CM1_SOTTOCONTO));
// Se e' un sottoconto posso cancellarlo se non esistono saldi
if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
{
_saldi->zero();
_saldi->put(PCN_GRUPPO, gruppo);
_saldi->put(PCN_CONTO, conto);
_saldi->put(PCN_SOTTOCONTO, sottoc);
_saldi->read(_isgteq);
return _saldi->good() && gruppo ==_saldi->get_int(PCN_GRUPPO) &&
conto ==_saldi->get_int(PCN_CONTO) &&
sottoc ==_saldi->get_long(PCN_SOTTOCONTO);
}
get_relation()->save_status();
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo);
// Se e' un conto controllo se ha dei sottoconti
if (conto != 0)
pconti.put(PCN_CONTO, conto);
TRectype rec1(pconti.curr());
pconti.setkey(1) ;
pconti.read();
pconti.next();
const bool prot = (pconti.good() && (pconti.curr() == rec1));
get_relation()->restore_status();
return prot;
}
void CG0100_application::init_query_mode(TMask& m)
{
m.show(-1); //m.send_key(K_SHIFT + K_CTRL + 's', -1);
m.show(-2); //m.send_key(K_SHIFT + K_CTRL + 's', -2);
m.show(-3); //m.send_key(K_SHIFT + K_CTRL + 's', -3);
}
HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
{
if (f.active() && key == K_SPACE)
{
TMask& m = f.mask();
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
return TRUE;
}
void CG0100_application::init_insert_mode(TMask& m)
{
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
bool ivd_enable = TRUE;
if (conto == 0 && sottoc == 0)
m.show(-1, FALSE); // send_key(K_SHIFT + K_CTRL + 'h', -1);
else
if (sottoc == 0)
m.show(-2, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -2);
else
m.show(-3, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -3);
TLocalisamfile& pconti = _rel->lfile();
TString s(15), s2(1), s3(8), s4(2);
int s1 = 0;
pconti.setkey(1) ;
int indbil = 0;
if (sottoc != 0)
{
pconti.zero();
pconti.put(PCN_GRUPPO, gruppo);
pconti.put(PCN_CONTO, conto);
pconti.read();
if (pconti.good())
{
s = pconti.get(PCN_CODCBL);
s1 = atoi(pconti.get(PCN_SEZIVD));
s2 = pconti.get(PCN_LETTIVD);
s3 = pconti.get(PCN_NUMRIVD);
s4 = pconti.get(PCN_NUMIVD);
indbil = pconti.get_int(PCN_INDBIL);
}
ivd_enable = (s1 == 0) && s2.empty() && s3.empty() && s4.empty();
}
m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI);
if (conto != 0)
{
m.enable(FLD_CM1_SEZIVD, ivd_enable);
m.show(FLD_CM1_LETTIVD, ivd_enable);
m.show(FLD_CM1_NUMRIVD, ivd_enable);
m.show(FLD_CM1_NUMIVD, ivd_enable);
m.show(FLD_CM1_LETTIVDH, !ivd_enable);
m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
m.show(FLD_CM1_NUMIVDH, !ivd_enable);
if (!ivd_enable)
{
m.set(FLD_CM1_SEZIVD, s1);
m.set(FLD_CM1_LETTIVDH, s2);
m.set(FLD_CM1_NUMRIVDH, s3);
m.set(FLD_CM1_NUMIVDH, s4);
m.enable(FLD_CM1_SEZIVDOPP);
}
pconti.zero();
pconti.put(PCN_GRUPPO, gruppo);
pconti.read();
if (pconti.good())
if (s.empty()) s = pconti.get(PCN_CODCBL);
}
if (s.not_empty())
{
m.set(FLD_CM1_CODANALISIH, s);
m.show(FLD_CM1_CODANALISIH);
m.hide(FLD_CM1_CODTABANALISI);
}
else
{
m.show(FLD_CM1_CODTABANALISI);
m.hide(FLD_CM1_CODANALISIH);
}
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
const TMask& m = f.mask();
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
TLocalisamfile& pconti = app().get_relation()->lfile();
if (gruppo != 0 && conto != 0)
{
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.setkey(1) ;
pconti.read();
if (pconti.bad())
return f.warning_box ("Il gruppo non esiste");
}
}
return TRUE;
}
HIDDEN bool conto_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
const TMask& m = f.mask();
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
TLocalisamfile& pconti = app().get_relation()->lfile();
if (gruppo != 0 && conto != 0 && sottoc != 0)
{
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.put(PCN_CONTO, conto) ;
pconti.setkey(1) ;
pconti.read();
if (pconti.bad())
return m.field(FLD_CM1_CONTO).warning_box ("Il conto non esiste");
else
{
if (pconti.get(PCN_TMCF).not_empty())
return m.field(FLD_CM1_SOTTOCONTO).warning_box ("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore");
}
}
}
return TRUE;
}
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
{
if (key == K_TAB)
{
const int gruppo = f.mask().get_int(FLD_CM1_GRUPPO);
if (gruppo == 0) return TRUE;
const int conto = f.mask().get_int(FLD_CM1_CONTO);
const long sottoconto = f.mask().get_long(FLD_CM1_SOTTOCONTO);
if (sottoconto != 0 && conto == 0)
return f.mask().field(FLD_CM1_CONTO).error_box("Manca il conto");
return f.mask().stop_run(K_AUTO_ENTER);
}
return TRUE;
}
bool CG0100_application::user_create()
{
_msk = new TMask("cg0100a") ;
_msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
_msk->set_handler(FLD_CM1_CONTO, conto_handler);
_msk->set_handler(FLD_CM1_SOTTOCONTO, sottoc_handler);
_msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
_rel = new TRelation(LF_PCON);
_saldi = new TLocalisamfile(LF_SALDI);
_saldi->setkey(2);
set_search_field(FLD_CM1_GRUPPO);
return TRUE;
}
bool CG0100_application::user_destroy()
{
delete _msk;
delete _rel;
delete _saldi;
return TRUE;
}
int cg0100(int argc, char* argv[])
{
CG0100_application a ;
a.run(argc, argv, "Piano dei conti");
return 0;
}
#include <relapp.h>
#include <pconti.h>
#include "cg0.h"
#include "cg0100.h"
#define ATTIVITA 1
#define PASSIVITA 2
#define COSTI 3
#define RICAVI 4
#define ORDINE 5
class CG0100_application : public TRelation_application
{
TMask* _msk;
TRelation *_rel;
TLocalisamfile* _saldi;
TLocalisamfile* _tabcom;
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
virtual bool protected_record(TRectype &rec);
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
virtual int write(const TMask& m);
virtual int rewrite(const TMask & m);
virtual int read(TMask& m);
public:
virtual TRelation* get_relation() const {return _rel;}
CG0100_application() {}
};
HIDDEN inline CG0100_application & app() { return (CG0100_application &) main_app();}
int CG0100_application::read(TMask& m)
{
const TRelation *r = get_relation();
m.autoload(r);
if (m.get(FLD_CM1_LETTIVD).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVD, sezivd + 5);
}
if (m.get(FLD_CM1_LETTIVDOPP).empty())
{
int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 1 || sezivd == 2)
m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
}
return NOERR;
}
int CG0100_application::rewrite(const TMask& m)
{
TRelation *r = get_relation();
m.autosave(r);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
TString16 sez;
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
return r->rewrite();
}
int CG0100_application::write(const TMask& m)
{
TRelation *r = get_relation();
TString16 sez;
m.autosave(r);
int sezivd = m.get_int(FLD_CM1_SEZIVD);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVD, sez);
}
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
if (sezivd == 6 || sezivd == 7)
{
sez.format("%d", sezivd - 5);
r->lfile().put(PCN_SEZIVDOPP, sez);
}
return r->write();
}
// Controlla se puo' essere effettuata la cancellazione di un conto
bool CG0100_application::protected_record(TRectype &rec)
{
TMask* m = get_mask(MODE_MOD);
TLocalisamfile& pconti = _rel->lfile();
const int gruppo = atoi(m->get(FLD_CM1_GRUPPO));
const int conto = atoi(m->get(FLD_CM1_CONTO));
const long sottoc = atol(m->get(FLD_CM1_SOTTOCONTO));
// Se e' un sottoconto posso cancellarlo se non esistono saldi
if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
{
_saldi->zero();
_saldi->put(PCN_GRUPPO, gruppo);
_saldi->put(PCN_CONTO, conto);
_saldi->put(PCN_SOTTOCONTO, sottoc);
_saldi->read(_isgteq);
return _saldi->good() && gruppo ==_saldi->get_int(PCN_GRUPPO) &&
conto ==_saldi->get_int(PCN_CONTO) &&
sottoc ==_saldi->get_long(PCN_SOTTOCONTO);
}
get_relation()->save_status();
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo);
// Se e' un conto controllo se ha dei sottoconti
if (conto != 0)
pconti.put(PCN_CONTO, conto);
TRectype rec1(pconti.curr());
pconti.setkey(1) ;
pconti.read();
pconti.next();
const bool prot = (pconti.good() && (pconti.curr() == rec1));
get_relation()->restore_status();
return prot;
}
void CG0100_application::init_query_mode(TMask& m)
{
m.show(-1); //m.send_key(K_SHIFT + K_CTRL + 's', -1);
m.show(-2); //m.send_key(K_SHIFT + K_CTRL + 's', -2);
m.show(-3); //m.send_key(K_SHIFT + K_CTRL + 's', -3);
}
HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
{
if (f.active() && key == K_SPACE)
{
TMask& m = f.mask();
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
return TRUE;
}
void CG0100_application::init_insert_mode(TMask& m)
{
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
bool ivd_enable = TRUE;
if (conto == 0 && sottoc == 0)
m.show(-1, FALSE); // send_key(K_SHIFT + K_CTRL + 'h', -1);
else
if (sottoc == 0)
m.show(-2, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -2);
else
m.show(-3, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -3);
TLocalisamfile& pconti = _rel->lfile();
TString s(15), s2(1), s3(8), s4(2);
int s1 = 0;
pconti.setkey(1) ;
int indbil = 0;
if (sottoc != 0)
{
pconti.zero();
pconti.put(PCN_GRUPPO, gruppo);
pconti.put(PCN_CONTO, conto);
pconti.read();
if (pconti.good())
{
s = pconti.get(PCN_CODCBL);
s1 = atoi(pconti.get(PCN_SEZIVD));
s2 = pconti.get(PCN_LETTIVD);
s3 = pconti.get(PCN_NUMRIVD);
s4 = pconti.get(PCN_NUMIVD);
indbil = pconti.get_int(PCN_INDBIL);
}
ivd_enable = (s1 == 0) && s2.empty() && s3.empty() && s4.empty();
}
m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI);
if (conto != 0)
{
m.enable(FLD_CM1_SEZIVD, ivd_enable);
m.show(FLD_CM1_LETTIVD, ivd_enable);
m.show(FLD_CM1_NUMRIVD, ivd_enable);
m.show(FLD_CM1_NUMIVD, ivd_enable);
m.show(FLD_CM1_LETTIVDH, !ivd_enable);
m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
m.show(FLD_CM1_NUMIVDH, !ivd_enable);
if (!ivd_enable)
{
m.set(FLD_CM1_SEZIVD, s1);
m.set(FLD_CM1_LETTIVDH, s2);
m.set(FLD_CM1_NUMRIVDH, s3);
m.set(FLD_CM1_NUMIVDH, s4);
m.enable(FLD_CM1_SEZIVDOPP);
}
pconti.zero();
pconti.put(PCN_GRUPPO, gruppo);
pconti.read();
if (pconti.good())
if (s.empty()) s = pconti.get(PCN_CODCBL);
}
if (s.not_empty())
{
m.set(FLD_CM1_CODANALISIH, s);
m.show(FLD_CM1_CODANALISIH);
m.hide(FLD_CM1_CODTABANALISI);
}
else
{
m.show(FLD_CM1_CODTABANALISI);
m.hide(FLD_CM1_CODANALISIH);
}
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
}
HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
const TMask& m = f.mask();
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
TLocalisamfile& pconti = app().get_relation()->lfile();
if (gruppo != 0 && conto != 0)
{
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.setkey(1) ;
pconti.read();
if (pconti.bad())
return f.warning_box ("Il gruppo non esiste");
}
}
return TRUE;
}
HIDDEN bool conto_handler(TMask_field& f, KEY key)
{
if (key == K_ENTER)
{
const TMask& m = f.mask();
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
const int conto = atoi(m.get(FLD_CM1_CONTO));
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
TLocalisamfile& pconti = app().get_relation()->lfile();
if (gruppo != 0 && conto != 0 && sottoc != 0)
{
pconti.zero() ;
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.put(PCN_CONTO, conto) ;
pconti.setkey(1) ;
pconti.read();
if (pconti.bad())
return m.field(FLD_CM1_CONTO).warning_box ("Il conto non esiste");
else
{
if (pconti.get(PCN_TMCF).not_empty())
return m.field(FLD_CM1_SOTTOCONTO).warning_box ("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore");
}
}
}
return TRUE;
}
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
{
if (key == K_TAB)
{
const int gruppo = f.mask().get_int(FLD_CM1_GRUPPO);
if (gruppo == 0) return TRUE;
const int conto = f.mask().get_int(FLD_CM1_CONTO);
const long sottoconto = f.mask().get_long(FLD_CM1_SOTTOCONTO);
if (sottoconto != 0 && conto == 0)
return f.mask().field(FLD_CM1_CONTO).error_box("Manca il conto");
return f.mask().stop_run(K_AUTO_ENTER);
}
return TRUE;
}
bool CG0100_application::user_create()
{
_msk = new TMask("cg0100a") ;
_msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
_msk->set_handler(FLD_CM1_CONTO, conto_handler);
_msk->set_handler(FLD_CM1_SOTTOCONTO, sottoc_handler);
_msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
_rel = new TRelation(LF_PCON);
_saldi = new TLocalisamfile(LF_SALDI);
_saldi->setkey(2);
set_search_field(FLD_CM1_GRUPPO);
return TRUE;
}
bool CG0100_application::user_destroy()
{
delete _msk;
delete _rel;
delete _saldi;
return TRUE;
}
int cg0100(int argc, char* argv[])
{
CG0100_application a ;
a.run(argc, argv, "Piano dei conti");
return 0;
}

View File

@ -1,354 +1,354 @@
#include "cg0100.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Piano dei conti " 0 -1 0 19
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER FLD_CM1_GRUPPO 3
BEGIN
PROMPT 2 1 "Gruppo "
HELP "Codice del gruppo"
FIELD LF_PCON->GRUPPO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO FLD_CM1_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_DESCG DESCR
CHECKTYPE NORMAL
END
STRING FLD_CM1_DESCG 50
BEGIN
PROMPT 23 1 ""
FLAGS "D"
END
NUMBER FLD_CM1_CONTO 3
BEGIN
PROMPT 2 2 "Conto "
HELP "Codice dell'eventuale conto"
FIELD LF_PCON->CONTO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT ((CONTO!="") && (SOTTOCONTO=""))
COPY INPUT FLD_CM1_GRUPPO
INPUT CONTO FLD_CM1_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESCC DESCR
CHECKTYPE NORMAL
END
STRING FLD_CM1_DESCC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
NUMBER FLD_CM1_SOTTOCONTO 6
BEGIN
PROMPT 2 3 "Sottoconto "
HELP "Codice dell'eventuale sottoconto"
FIELD LF_PCON->SOTTOCONTO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT FLD_CM1_CONTO
INPUT SOTTOCONTO FLD_CM1_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sospeso" SOSPESO
DISPLAY "Descrizione@70" DESCR
OUTPUT FLD_CM1_SOTTOCONTO SOTTOCONTO
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESC DESCR
END
STRING FLD_CM1_DESC 50
BEGIN
PROMPT 23 3 ""
FIELD LF_PCON->DESCR
KEY 2
USE LF_PCON KEY 2
INPUT DESCR FLD_CM1_DESC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sospeso" SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto " SOTTOCONTO
COPY OUTPUT FLD_CM1_SOTTOCONTO
CHECKTYPE REQUIRED
HELP "Descrizione del gruppo o del conto o del sottoconto"
WARNING "Manca la descrizione"
END
NUMBER FLD_CM1_CODTABANALISI 10
BEGIN
PROMPT 1 5 "Codice Tabella Analisi "
HELP "Codice di raggruppamento per l'analisi di bilancio"
FIELD LF_PCON->CODCBL
FLAGS "R"
END
NUMBER FLD_CM1_CODANALISIH 10
BEGIN
PROMPT 1 5 "Codice Tabella Analisi "
FLAGS "RHD"
END
LIST FLD_CM1_INDBIL 1 22
BEGIN
PROMPT 1 6 "Sezione di bilancio "
FIELD LF_PCON->INDBIL
GROUP 1 3
HELP "Sezione di appartenenza del conto"
ITEM "1|1. Attivita'"
ITEM "2|2. Passivita'"
ITEM "3|3. Costi"
ITEM "4|4. Ricavi"
ITEM "5|5. Conti d'ordine"
END
LIST FLD_CM1_SEZIVD 1 22
BEGIN
PROMPT 1 7 "Sez. e classe IV dir. "
FIELD LF_PCON->SEZIVD
ITEM "0|0. Nessuna" MESSAGE CLEAR,5@|CLEAR,6@
ITEM "1|1. Attivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "2|2. Passivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "9|9. Conto economico" MESSAGE ENABLE,5@|ENABLE,6@
HELP "Codice del conto secondo la IV direttiva CEE"
GROUP 1 4
END
STRING FLD_CM1_LETTIVD 1 1
BEGIN
PROMPT 56 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->LETTIVD
GROUP 1 5
FLAGS "U"
END
STRING FLD_CM1_LETTIVDH 1
BEGIN
PROMPT 56 7 ""
FLAGS "HDU"
GROUP 1 5
END
NUMBER FLD_CM1_NUMRIVD 8 4
BEGIN
PROMPT 60 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->NUMRIVD
GROUP 1 5
FLAGS "MZ"
END
NUMBER FLD_CM1_NUMRIVDH 8 4
BEGIN
PROMPT 60 7 ""
FLAGS "HDMZ"
GROUP 1 5
END
NUMBER FLD_CM1_NUMIVD 2
BEGIN
PROMPT 71 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->NUMIVD
FLAGS "RZ"
GROUP 1 5
USE %IVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVD
INPUT CODTAB[2,2] FLD_CM1_LETTIVD
INPUT CODTAB[3,6] FLD_CM1_NUMRIVD
INPUT CODTAB[7,8] FLD_CM1_NUMIVD
DISPLAY "Sezione" CODTAB[1,1]
DISPLAY "Lettera" CODTAB[2,2]
DISPLAY "Classe @M" CODTAB[3,6]
DISPLAY "Numero" CODTAB[7,8]
DISPLAY "Descrizione@70" S0
OUTPUT FLD_CM1_SEZIVD CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVD CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVD CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVD CODTAB[7,8]
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
NUMBER FLD_CM1_NUMIVDH 2
BEGIN
PROMPT 71 7 ""
FLAGS "HDRZ"
GROUP 1 5
END
LIST FLD_CM1_SEZIVDOPP 1 22
BEGIN
PROMPT 1 8 "Classe segno opposto "
FIELD LF_PCON->SEZIVDOPP
GROUP 1 2 4 6
ITEM "0|0. Nessuna" MESSAGE CLEAR,7@
ITEM "1|1. Attivita'" MESSAGE ENABLE,7@
ITEM "2|2. Passivita'" MESSAGE ENABLE,7@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,7@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,7@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,7@
ITEM "9|9. Conto economico" MESSAGE ENABLE,7@
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
END
STRING FLD_CM1_LETTIVDOPP 1
BEGIN
PROMPT 56 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->LETTIVDOPP
FLAGS "U"
GROUP 1 2 4 7
END
NUMBER FLD_CM1_NUMRIVDOPP 8 4
BEGIN
PROMPT 60 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->NUMRIVDOPP
FLAGS "MZ"
GROUP 1 2 4 7
END
NUMBER FLD_CM1_NUMIVDOPP 2
BEGIN
PROMPT 71 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->NUMIVDOPP
FLAGS "RZ"
GROUP 1 2 4 7
COPY USE FLD_CM1_NUMIVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVDOPP
INPUT CODTAB[2,2] FLD_CM1_LETTIVDOPP
INPUT CODTAB[3,6] FLD_CM1_NUMRIVDOPP
INPUT CODTAB[7,8] FLD_CM1_NUMIVDOPP
COPY DISPLAY FLD_CM1_NUMIVD
OUTPUT FLD_CM1_SEZIVDOPP CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVDOPP CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVDOPP CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVDOPP CODTAB[7,8]
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
LIST FLD_CM1_TIPOSPRIC 1 50
BEGIN
PROMPT 1 9 "Tipo Spesa/Ricavo "
FIELD LF_PCON->TIPOSPRIC
GROUP 1 2
HELP "Specificare il tipo do conto"
ITEM "0|0. Acquisti o vendite in genere"
ITEM "1|1. Acquisti beni per rivendita"
ITEM "2|2. Acquisti beni ammortizzabili"
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
ITEM "4|4. Vendita beni strumentali art. 17"
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese Generali"
END
LIST FLD_CM1_RICSER 1 18
BEGIN
PROMPT 1 10 "Ricavi per servizi "
FIELD RICSER
FLAGS "H"
ITEM "0|Altre attivita'"
ITEM "1|Servizi"
END
LIST FLD_CM1_TMCF 1 13
BEGIN
PROMPT 1 11 "Tipo sottoconti "
FIELD LF_PCON->TMCF
GROUP 1 3
HELP "Tipo dei sottoconti (Normale o clienti/fornitori)"
ITEM " |Normali"
ITEM "C|Clienti"
ITEM "F|Fornitori"
END
LIST FLD_CM2_SEZSALDI 1 10
BEGIN
PROMPT 1 12 "Controllo saldo primanota "
HELP "Tipo di controllo del saldo in prima nota"
FIELD LF_PCON->SEZSALDI
GROUP 1
ITEM " |Nessuno"
ITEM "A|Avere"
ITEM "D|Dare"
END
BOOLEAN FLD_CM2_STSOTTBIL
BEGIN
PROMPT 1 14 "Stampa dettaglio sottoconti su bilanci "
HELP "Indicare se stampare il dettaglio dei sottoconti nei bilanci di verifica"
FIELD LF_PCON->STSOTTBIL
GROUP 1 3
END
BOOLEAN FLD_CM2_COMPENS
BEGIN
PROMPT 50 14 "Compensazione saldi "
HELP "Indicare se e' ammessa la compensazione dei saldi"
FIELD LF_PCON->COMPENS
GROUP 1 3
END
BOOLEAN FLD_CM2_STSOTTAB
BEGIN
PROMPT 1 15 "Stampa dettaglio sottoconti su analisi "
HELP "Indicare se stampare il dettaglio dei sottoconti nell'analisi di bilancio"
FIELD LF_PCON->STSOTTAB
GROUP 1 3
MESSAGE COPY,FLD_CM2_STSOTTABS
END
BOOLEAN FLD_CM2_STSOTTABS
BEGIN
PROMPT 1 15 "Stampa dettaglio movimenti su analisi "
FIELD LF_PCON->STSOTTAB
FLAGS "H"
GROUP 1 2
MESSAGE COPY,FLD_CM2_STSOTTAB
END
BOOLEAN FLD_CM2_SOSPESO
BEGIN
PROMPT 50 15 "Conto sospeso"
HELP "Indicare se sospendere il conto in prima nota"
FIELD LF_PCON->SOSPESO
GROUP 1 2
END
ENDPAGE
ENDMASK
#include "cg0100.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Piano dei conti " 0 -1 0 19
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER FLD_CM1_GRUPPO 3
BEGIN
PROMPT 2 1 "Gruppo "
HELP "Codice del gruppo"
FIELD LF_PCON->GRUPPO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT CONTO=""
INPUT GRUPPO FLD_CM1_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_DESCG DESCR
CHECKTYPE NORMAL
END
STRING FLD_CM1_DESCG 50
BEGIN
PROMPT 23 1 ""
FLAGS "D"
END
NUMBER FLD_CM1_CONTO 3
BEGIN
PROMPT 2 2 "Conto "
HELP "Codice dell'eventuale conto"
FIELD LF_PCON->CONTO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT ((CONTO!="") && (SOTTOCONTO=""))
COPY INPUT FLD_CM1_GRUPPO
INPUT CONTO FLD_CM1_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESCC DESCR
CHECKTYPE NORMAL
END
STRING FLD_CM1_DESCC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
NUMBER FLD_CM1_SOTTOCONTO 6
BEGIN
PROMPT 2 3 "Sottoconto "
HELP "Codice dell'eventuale sottoconto"
FIELD LF_PCON->SOTTOCONTO
FLAGS "R"
KEY 1
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
COPY INPUT FLD_CM1_CONTO
INPUT SOTTOCONTO FLD_CM1_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Sospeso" SOSPESO
DISPLAY "Descrizione@70" DESCR
OUTPUT FLD_CM1_SOTTOCONTO SOTTOCONTO
OUTPUT FLD_CM1_GRUPPO GRUPPO
OUTPUT FLD_CM1_CONTO CONTO
OUTPUT FLD_CM1_DESC DESCR
END
STRING FLD_CM1_DESC 50
BEGIN
PROMPT 23 3 ""
FIELD LF_PCON->DESCR
KEY 2
USE LF_PCON KEY 2
INPUT DESCR FLD_CM1_DESC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Sospeso" SOSPESO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto " SOTTOCONTO
COPY OUTPUT FLD_CM1_SOTTOCONTO
CHECKTYPE REQUIRED
HELP "Descrizione del gruppo o del conto o del sottoconto"
WARNING "Manca la descrizione"
END
NUMBER FLD_CM1_CODTABANALISI 10
BEGIN
PROMPT 1 5 "Codice Tabella Analisi "
HELP "Codice di raggruppamento per l'analisi di bilancio"
FIELD LF_PCON->CODCBL
FLAGS "R"
END
NUMBER FLD_CM1_CODANALISIH 10
BEGIN
PROMPT 1 5 "Codice Tabella Analisi "
FLAGS "RHD"
END
LIST FLD_CM1_INDBIL 1 22
BEGIN
PROMPT 1 6 "Sezione di bilancio "
FIELD LF_PCON->INDBIL
GROUP 1 3
HELP "Sezione di appartenenza del conto"
ITEM "1|1. Attivita'"
ITEM "2|2. Passivita'"
ITEM "3|3. Costi"
ITEM "4|4. Ricavi"
ITEM "5|5. Conti d'ordine"
END
LIST FLD_CM1_SEZIVD 1 22
BEGIN
PROMPT 1 7 "Sez. e classe IV dir. "
FIELD LF_PCON->SEZIVD
ITEM "0|0. Nessuna" MESSAGE CLEAR,5@|CLEAR,6@
ITEM "1|1. Attivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "2|2. Passivita'" MESSAGE ENABLE,5@|ENABLE,6@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,5@|ENABLE,6@
ITEM "9|9. Conto economico" MESSAGE ENABLE,5@|ENABLE,6@
HELP "Codice del conto secondo la IV direttiva CEE"
GROUP 1 4
END
STRING FLD_CM1_LETTIVD 1 1
BEGIN
PROMPT 56 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->LETTIVD
GROUP 1 5
FLAGS "U"
END
STRING FLD_CM1_LETTIVDH 1
BEGIN
PROMPT 56 7 ""
FLAGS "HDU"
GROUP 1 5
END
NUMBER FLD_CM1_NUMRIVD 8 4
BEGIN
PROMPT 60 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->NUMRIVD
GROUP 1 5
FLAGS "MZ"
END
NUMBER FLD_CM1_NUMRIVDH 8 4
BEGIN
PROMPT 60 7 ""
FLAGS "HDMZ"
GROUP 1 5
END
NUMBER FLD_CM1_NUMIVD 2
BEGIN
PROMPT 71 7 ""
HELP "Codice del conto secondo la IV direttiva CEE"
FIELD LF_PCON->NUMIVD
FLAGS "RZ"
GROUP 1 5
USE %IVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVD
INPUT CODTAB[2,2] FLD_CM1_LETTIVD
INPUT CODTAB[3,6] FLD_CM1_NUMRIVD
INPUT CODTAB[7,8] FLD_CM1_NUMIVD
DISPLAY "Sezione" CODTAB[1,1]
DISPLAY "Lettera" CODTAB[2,2]
DISPLAY "Classe @M" CODTAB[3,6]
DISPLAY "Numero" CODTAB[7,8]
DISPLAY "Descrizione@70" S0
OUTPUT FLD_CM1_SEZIVD CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVD CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVD CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVD CODTAB[7,8]
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
NUMBER FLD_CM1_NUMIVDH 2
BEGIN
PROMPT 71 7 ""
FLAGS "HDRZ"
GROUP 1 5
END
LIST FLD_CM1_SEZIVDOPP 1 22
BEGIN
PROMPT 1 8 "Classe segno opposto "
FIELD LF_PCON->SEZIVDOPP
GROUP 1 2 4 6
ITEM "0|0. Nessuna" MESSAGE CLEAR,7@
ITEM "1|1. Attivita'" MESSAGE ENABLE,7@
ITEM "2|2. Passivita'" MESSAGE ENABLE,7@
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,7@
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,7@
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,7@
ITEM "9|9. Conto economico" MESSAGE ENABLE,7@
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
END
STRING FLD_CM1_LETTIVDOPP 1
BEGIN
PROMPT 56 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->LETTIVDOPP
FLAGS "U"
GROUP 1 2 4 7
END
NUMBER FLD_CM1_NUMRIVDOPP 8 4
BEGIN
PROMPT 60 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->NUMRIVDOPP
FLAGS "MZ"
GROUP 1 2 4 7
END
NUMBER FLD_CM1_NUMIVDOPP 2
BEGIN
PROMPT 71 8 ""
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
FIELD LF_PCON->NUMIVDOPP
FLAGS "RZ"
GROUP 1 2 4 7
COPY USE FLD_CM1_NUMIVD
INPUT CODTAB[1,1] FLD_CM1_SEZIVDOPP
INPUT CODTAB[2,2] FLD_CM1_LETTIVDOPP
INPUT CODTAB[3,6] FLD_CM1_NUMRIVDOPP
INPUT CODTAB[7,8] FLD_CM1_NUMIVDOPP
COPY DISPLAY FLD_CM1_NUMIVD
OUTPUT FLD_CM1_SEZIVDOPP CODTAB[1,1]
OUTPUT FLD_CM1_LETTIVDOPP CODTAB[2,2]
OUTPUT FLD_CM1_NUMRIVDOPP CODTAB[3,6]
OUTPUT FLD_CM1_NUMIVDOPP CODTAB[7,8]
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
LIST FLD_CM1_TIPOSPRIC 1 50
BEGIN
PROMPT 1 9 "Tipo Spesa/Ricavo "
FIELD LF_PCON->TIPOSPRIC
GROUP 1 2
HELP "Specificare il tipo do conto"
ITEM "0|0. Acquisti o vendite in genere"
ITEM "1|1. Acquisti beni per rivendita"
ITEM "2|2. Acquisti beni ammortizzabili"
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
ITEM "4|4. Vendita beni strumentali art. 17"
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese Generali"
END
LIST FLD_CM1_RICSER 1 18
BEGIN
PROMPT 1 10 "Ricavi per servizi "
FIELD RICSER
FLAGS "H"
ITEM "0|Altre attivita'"
ITEM "1|Servizi"
END
LIST FLD_CM1_TMCF 1 13
BEGIN
PROMPT 1 11 "Tipo sottoconti "
FIELD LF_PCON->TMCF
GROUP 1 3
HELP "Tipo dei sottoconti (Normale o clienti/fornitori)"
ITEM " |Normali"
ITEM "C|Clienti"
ITEM "F|Fornitori"
END
LIST FLD_CM2_SEZSALDI 1 10
BEGIN
PROMPT 1 12 "Controllo saldo primanota "
HELP "Tipo di controllo del saldo in prima nota"
FIELD LF_PCON->SEZSALDI
GROUP 1
ITEM " |Nessuno"
ITEM "A|Avere"
ITEM "D|Dare"
END
BOOLEAN FLD_CM2_STSOTTBIL
BEGIN
PROMPT 1 14 "Stampa dettaglio sottoconti su bilanci "
HELP "Indicare se stampare il dettaglio dei sottoconti nei bilanci di verifica"
FIELD LF_PCON->STSOTTBIL
GROUP 1 3
END
BOOLEAN FLD_CM2_COMPENS
BEGIN
PROMPT 50 14 "Compensazione saldi "
HELP "Indicare se e' ammessa la compensazione dei saldi"
FIELD LF_PCON->COMPENS
GROUP 1 3
END
BOOLEAN FLD_CM2_STSOTTAB
BEGIN
PROMPT 1 15 "Stampa dettaglio sottoconti su analisi "
HELP "Indicare se stampare il dettaglio dei sottoconti nell'analisi di bilancio"
FIELD LF_PCON->STSOTTAB
GROUP 1 3
MESSAGE COPY,FLD_CM2_STSOTTABS
END
BOOLEAN FLD_CM2_STSOTTABS
BEGIN
PROMPT 1 15 "Stampa dettaglio movimenti su analisi "
FIELD LF_PCON->STSOTTAB
FLAGS "H"
GROUP 1 2
MESSAGE COPY,FLD_CM2_STSOTTAB
END
BOOLEAN FLD_CM2_SOSPESO
BEGIN
PROMPT 50 15 "Conto sospeso"
HELP "Indicare se sospendere il conto in prima nota"
FIELD LF_PCON->SOSPESO
GROUP 1 2
END
ENDPAGE
ENDMASK

View File

@ -1,157 +1,154 @@
#ifndef __CG0200_H
#define __CG0200_H
//#define PZ_COMUNI 0
// posizione file comuni in _arrfiles
#define TCLI "C"
#define TFOR "F"
#define F_TIPOCF 101
#define F_CODCF 102
#define F_RAGSOC 103
#define F_INDCF 104
#define F_CIVCF 105
#define F_STATOCF 106
#define F_COMCF 107
#define F_CAPCF 108
#define F_COFI 109
#define F_STATOPAIV 110
#define F_PAIV 111
#define F_TIPOPERS 112
#define F_ALLEG 113
#define F_GRUPPO 114
#define F_CONTO 115
#define F_DESCONTO 137
#define F_GRUPPORIC 116
#define F_CONTORIC 117
#define F_SOTTOCRIC 118
#define F_DESCRIC 138
#define F_TIPOAPER 119
#define F_CODANAGPER 120
#define F_PTEL 121
#define F_TEL 122
#define F_PFAX 123
#define F_FAX 124
#define F_PTELEX 125
#define F_TELEX 126
#define F_DATANASC 127
#define F_STATONASC 128
#define F_COMNASC 129
#define F_DENCOMNASC 135
#define F_CODSTAT 130
#define F_CODPAG 131
#define F_RAGSOC1 132
#define F_CODABI 133
#define F_CODBAN 134
#define F_CODVAL 136
#define F_FIDO 139
#define F_LOCALITACF 144
#define F_CODAG 145
#define F_SOSPESO 146
#define F_CODALLEG 148
#define F_OCCASIONALE 149
#define F_DENCOMCF 150
#define F_PROVCF 152
#define F_RICALT 151
#define F_PTEL2 153
#define F_TEL2 154
#define F_PTEL3 155
#define F_TEL3 156
#define F_CODLIN 157
#define F_TIPOCFVEN 158
#define F_CODCFVEN 159
#define F_CODINDDOC 160
#define F_CODNOTE 161
#define F_CODLEG 162
#define F_CODCATC 163
#define F_CODZONA 164
#define F_PROVV 165
#define F_LIQPAG 166
#define F_CODPRCF 167
#define F_CODINDSP 168
#define F_CODPORTO 169
#define F_RAGGDOC 170
#define F_NCOPIE 171
#define F_CODCFASS 172
#define F_ASSFIS 173
#define F_FATTSOSP 174
#define F_VSNRPROT 175
#define F_VSDATAREG 176
#define F_NSNRPROT 177
#define F_NSDATAREG 178
#define F_ADDBNS1500 179
#define F_CATFIN 180
#define F_CODABIPR 181
#define F_CODBANPR 182
#define F_CODINDEFF 183
#define F_EMEFFRICH 184
#define F_CODNOTESP1 185
#define F_CODNOTESP2 186
#define F_CODSPMEZZO 187
#define F_IMPMINEFF 188
#define F_NONACCEFF 189
#define F_NONSCADEFF 190
#define F_ADDBOLLIRB 191
#define F_ADDBOLLITR 192
#define F_ADDSPINC 193
#define F_IVARID 194
#define F_GESTCONTR 195
#define F_CATVEN 196
#define F_CODLIST 197
#define F_CODSCINC 198
#define F_SCONTOCL 199
#define F_CODMAG 200
#define F_CODSP1 201
#define F_CODSP2 202
#define F_CODSP3 203
#define F_CODSP4 204
#define F_PROFSOLL 205
#define F_MAXSOLL 206
#define F_DATAESC 207
#define F_DATASOLL 208
#define F_SCONTOR 209
#define F_TITOLO 210
#define F_RAGGOR 211
#define F_MINORD 212
#define F_MAXORD 213
#define F_PREVORD 214
#define F_TIPOEVORD 215
#define F_SHEET_G_VEN 216
#define F_CODVETT1 217
#define F_CODVETT2 218
#define F_CODVETT3 219
#define F_RAGSOCALLEG 220
#define F_CODCASS 221
#define F_CODFASS 222
#define F_TEMP 223
#define DLG_RIC 300
#define DLG_CST 301
#define F_RAGSOCA 302
//////////////////////////////////////
// Identificatori per cg0200b.uml //
//////////////////////////////////////
#define F_RAGSOCI 101
#define F_INDIRI 102
#define F_CIVI 103
#define F_LOCALI 104
#define F_CAPI 105
#define F_STATOI 106
#define F_COMI 107
#define F_PTELI 108
#define F_TELI 109
#define F_PFAXI 110
#define F_FAXI 111
#define F_IVARIDI 112
#define F_CODINDI 113
#define F_DENCOMI 114
#endif // __CG0200_H
#ifndef __CG0200_H
#define __CG0200_H
#define TCLI "C"
#define TFOR "F"
#define F_TIPOCF 101
#define F_CODCF 102
#define F_RAGSOC 103
#define F_INDCF 104
#define F_CIVCF 105
#define F_STATOCF 106
#define F_COMCF 107
#define F_CAPCF 108
#define F_COFI 109
#define F_STATOPAIV 110
#define F_PAIV 111
#define F_TIPOPERS 112
#define F_ALLEG 113
#define F_GRUPPO 114
#define F_CONTO 115
#define F_DESCONTO 137
#define F_GRUPPORIC 116
#define F_CONTORIC 117
#define F_SOTTOCRIC 118
#define F_DESCRIC 138
#define F_TIPOAPER 119
#define F_CODANAGPER 120
#define F_PTEL 121
#define F_TEL 122
#define F_PFAX 123
#define F_FAX 124
#define F_PTELEX 125
#define F_TELEX 126
#define F_DATANASC 127
#define F_STATONASC 128
#define F_COMNASC 129
#define F_DENCOMNASC 135
#define F_CODSTAT 130
#define F_CODPAG 131
#define F_RAGSOC1 132
#define F_CODABI 133
#define F_CODBAN 134
#define F_DESBAN 140
#define F_CODVAL 136
#define F_FIDO 139
#define F_LOCALITACF 144
#define F_CODAG 145
#define F_SOSPESO 146
#define F_CODALLEG 148
#define F_OCCASIONALE 149
#define F_DENCOMCF 150
#define F_PROVCF 152
#define F_RICALT 151
#define F_PTEL2 153
#define F_TEL2 154
#define F_PTEL3 155
#define F_TEL3 156
#define F_CODLIN 157
#define F_TIPOCFVEN 158
#define F_CODCFVEN 159
#define F_CODINDDOC 160
#define F_CODNOTE 161
#define F_CODLEG 162
#define F_CODCATC 163
#define F_CODZONA 164
#define F_PROVV 165
#define F_LIQPAG 166
#define F_CODPRCF 167
#define F_CODINDSP 168
#define F_CODPORTO 169
#define F_RAGGDOC 170
#define F_NCOPIE 171
#define F_CODCFASS 172
#define F_ASSFIS 173
#define F_FATTSOSP 174
#define F_VSNRPROT 175
#define F_VSDATAREG 176
#define F_NSNRPROT 177
#define F_NSDATAREG 178
#define F_ADDBNS1500 179
#define F_CATFIN 180
#define F_CODABIPR 181
#define F_CODBANPR 182
#define F_CODINDEFF 183
#define F_EMEFFRICH 184
#define F_CODNOTESP1 185
#define F_CODNOTESP2 186
#define F_CODSPMEZZO 187
#define F_IMPMINEFF 188
#define F_NONACCEFF 189
#define F_NONSCADEFF 190
#define F_ADDBOLLIRB 191
#define F_ADDBOLLITR 192
#define F_ADDSPINC 193
#define F_IVARID 194
#define F_GESTCONTR 195
#define F_CATVEN 196
#define F_CODLIST 197
#define F_CODSCINC 198
#define F_SCONTOCL 199
#define F_CODMAG 200
#define F_CODSP1 201
#define F_CODSP2 202
#define F_CODSP3 203
#define F_CODSP4 204
#define F_PROFSOLL 205
#define F_MAXSOLL 206
#define F_DATAESC 207
#define F_DATASOLL 208
#define F_SCONTOR 209
#define F_TITOLO 210
#define F_RAGGOR 211
#define F_MINORD 212
#define F_MAXORD 213
#define F_PREVORD 214
#define F_TIPOEVORD 215
#define F_SHEET_G_VEN 216
#define F_CODVETT1 217
#define F_CODVETT2 218
#define F_CODVETT3 219
#define F_RAGSOCALLEG 220
#define F_CODCASS 221
#define F_CODFASS 222
#define F_TEMP 223
#define F_DESTACF 224
#define DLG_RIC 300
#define DLG_CST 301
#define F_RAGSOCA 302
//////////////////////////////////////
// Identificatori per cg0200b.uml //
//////////////////////////////////////
#define F_RAGSOCI 101
#define F_INDIRI 102
#define F_CIVI 103
#define F_LOCALI 104
#define F_CAPI 105
#define F_STATOI 106
#define F_COMI 107
#define F_PTELI 108
#define F_TELI 109
#define F_PFAXI 110
#define F_FAXI 111
#define F_IVARIDI 112
#define F_CODINDI 113
#define F_DENCOMI 114
#endif // __CG0200_H

View File

@ -1,33 +1,33 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"

View File

@ -1,7 +1,7 @@
#include <checks.h>
int cg1300(int argc, char* argv[])
{
error_box("Applicazione ancora da sviluppare");
return 1;
}
#include <checks.h>
int cg1300(int argc, char* argv[])
{
error_box("Applicazione ancora da sviluppare");
return 1;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,330 +1,330 @@
#include <stdlib.h>
#include <xvtmacro.h>
#include <applicat.h>
#include <tabutil.h>
#include "cg2101.h"
#include "cg2103.h"
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
// Calcola l'anno di esercizio di una data
// Certified 99%
int date2esc(const TDate& d, int* prevesc)
{
if (prevesc) *prevesc = 0;
TTable esc("ESC");
for (int err = esc.first(); err == NOERR; err = esc.next())
{
const TDate ia(esc.get("D0")); // Data inizio esercizio
const TDate fa(esc.get("D1")); // Data fine esercizio
TString16 sanno(esc.get("CODTAB")); sanno.cut(4);
const int anno = atoi(sanno);
if (d >= ia && d <= fa)
return anno;
if (prevesc) *prevesc = anno;
}
return 0;
}
///////////////////////////////////////////////////////////
// Movimento di prima nota
///////////////////////////////////////////////////////////
TMovimentoPN::TMovimentoPN()
: TRelation(LF_MOV), _oldcg(0), _oldiva(0)
{
add(LF_RMOV, "NUMREG=NUMREG");
add(LF_RMOVIVA, "NUMREG=NUMREG");
}
void TMovimentoPN::destroy_rows()
{
_cg.destroy();
_iva.destroy();
}
TRectype& TMovimentoPN::cg(int i)
{
TRectype* r = (TRectype*)_cg.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_RMOV);
_cg.add(r, i);
}
return *r;
}
TRectype& TMovimentoPN::iva(int i)
{
TRectype* r = (TRectype*)_iva.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_RMOVIVA);
_iva.add(r, i);
}
return *r;
}
int TMovimentoPN::read_mov_rows()
{
const TLocalisamfile& rm = lfile(LF_RMOV);
const TLocalisamfile& ri = lfile(LF_RMOVIVA);
position_rels();
destroy_rows();
for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV))
{
const int row = rm.get_int(RMV_NUMRIG) - 1;
cg(row) = rm.curr();
}
_oldcg = cg_items();
for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA))
{
const int row = ri.get_int(RMI_NUMRIG) - 1;
iva(row) = ri.curr();
}
_oldiva = iva_items();
return NOERR;
}
int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate)
{
int err = file().read(op, lockop, atdate);
if (err == NOERR)
{
_olddate = file().get("DATAREG");
err = read_mov_rows();
}
return err;
}
int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
{
const bool scrivi = re ? (f.rewrite(rec) != NOERR) : TRUE;
if (scrivi)
f.write(rec);
#ifdef TRC
const long numreg = rec.get_long("NUMREG");
const int numrig = f.num() == LF_MOV ? 0 : rec.get_int("NUMRIG");
TRACE("write file=%d record=%ld nummov=%ld numrig=%d status=%d",
f.num(), f.recno(), numreg, numrig, f.status());
#endif
return f.status();
}
int TMovimentoPN::cancella(TLocalisamfile& f, int da, int a)
{
const long numreg = lfile().get_long(MOV_NUMREG);
for (int i = da; i <= a; i++)
{
f.put(MOV_NUMREG, numreg);
f.put(RMV_NUMRIG, i);
if (f.read(_isequal, _lock) == NOERR)
f.remove();
}
return f.status();
}
char TMovimentoPN::frequenza_versamenti(int year) const
{
static int last_year = 0;
static char last_freq = ' ';
if (year != last_year)
{
TString16 key;
key << year;
TTable lia("LIA");
lia.setkey(1);
lia.put("CODTAB", key);
if (lia.read() != NOERR)
{
TLocalisamfile nditte(LF_NDITTE);
nditte.setkey(1);
nditte.put("CODDITTA", main_app().get_firm());
nditte.read();
last_freq = nditte.get_char("FREQVIVA");
}
else
last_freq = lia.get_char("S7");
CHECK(last_freq == 'M' || last_freq == 'T', "Frequenza versamenti IVA assurda");
}
return last_freq;
}
int TMovimentoPN::date2liq(const TDate& data) const
{
const int anno = data.year();
int mese = data.month();
if (frequenza_versamenti(anno) == 'T')
mese += 2 - ((mese-1) % 3);
return mese;
}
bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
{
bool calcolata = FALSE;
const int anno = data.year();
const int mese = date2liq(data);
// Chiave di LIM: Anno (1-4), Mese (5-6)
TString16 key;
key << anno << mese;
TTable lim("LIM");
lim.setkey(1);
lim.put("CODTAB", key);
if (lim.read() == NOERR)
calcolata = lim.get_bool("B1"); // Controlla se calcolata in definitivo
if (reset && lim.get_bool("B0"))
{
// Resetta i flag di calcolato sulla liquidazione IVA del mese di registrazione
lim.put("B0", FALSE); // calcolato
lim.put("B1", FALSE); // definitivo
lim.rewrite();
}
return calcolata;
}
int TMovimentoPN::registra(bool re, bool force)
{
TLocalisamfile& m = lfile();
const int err = write_rec(re, m.curr(), m);
if (err != NOERR) return err;
TLocalisamfile& rm = lfile(LF_RMOV);
TLocalisamfile& ri = lfile(LF_RMOVIVA);
const long numreg = m.get_long("NUMREG");
for (int i = 0 ; i < cg_items(); i++)
{
if (!re) cg(i).put("NUMREG", numreg);
const int err = write_rec(re, cg(i), rm);
if (!force && err != NOERR) return err;
}
if (i < _oldcg)
cancella(rm, i+1, _oldcg);
_oldcg = cg_items();
const int annoiva = m.get_int("ANNOIVA");
const TString16 reg(m.get("REG"));
TRegistro registro(reg, annoiva);
const bool att_mista = reg.empty() ? FALSE : registro.attivita_mista();
for (i = 0 ; i < iva_items(); i++)
{
TRectype& r = iva(i);
if (!re) r.put("NUMREG", numreg); // Force correct number
int tipoatt = 1;
if (att_mista)
{
const char tipo = r.get_char("TIPOC");
if (tipo <= ' ')
{
TBill c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO"));
tipoatt = c.tipo_att();
}
}
r.put("TIPOATT", tipoatt);
const int err = write_rec(re, r, ri);
if (!force && err != NOERR) return err;
}
if (i < _oldiva)
cancella(ri, i+1, _oldiva);
_oldiva = iva_items();
// Aggiorna data registrazione e protocollo IVA sul registro
const TDate datareg(m.get("DATAREG"));
if (reg.not_empty())
{
const long protiva = m.get_long("PROTIVA");
const long uprotiva = m.get_long("UPROTIVA");
registro.update(max(protiva, uprotiva), datareg);
}
// Aggiorna flags di ricalcolo liquidazione
controlla_liquidazione(datareg, TRUE);
if (re && datareg != _olddate)
controlla_liquidazione(_olddate, TRUE);
const int att = att_mista ? 2 : 1;
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
TTable plm("PLM");
plm.setkey(1);
for (int a = 1; a <= att; a++)
{
TString16 chiave;
chiave << annoiva << registro.attivita() << a << date2liq(datareg);
plm.put("CODTAB", chiave);
if (plm.read() == NOERR)
{
const bool calcolato = plm.get_bool("B0");
if (calcolato)
{
plm.put("B0", FALSE);
plm.rewrite();
}
}
}
return err;
}
int TMovimentoPN::write(bool force, TDate&)
{
const TRectype& r = lfile().curr();
_oldcg = _oldiva = 0;
int err = registra(FALSE, force);
return err;
}
int TMovimentoPN::rewrite(bool force, TDate&)
{
return registra(TRUE, force);
}
int TMovimentoPN::remove(TDate&)
{
TLocalisamfile& m = lfile();
TLocalisamfile& rm = lfile(LF_RMOV);
TLocalisamfile& ri = lfile(LF_RMOVIVA);
cancella(rm, 1, _oldcg);
cancella(ri, 1, _oldiva);
m.remove();
_oldcg = _oldiva = 0;
return m.status();
}
#include <stdlib.h>
#include <xvtmacro.h>
#include <applicat.h>
#include <tabutil.h>
#include "cg2101.h"
#include "cg2103.h"
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
// Calcola l'anno di esercizio di una data
// Certified 99%
int date2esc(const TDate& d, int* prevesc)
{
if (prevesc) *prevesc = 0;
TTable esc("ESC");
for (int err = esc.first(); err == NOERR; err = esc.next())
{
const TDate ia(esc.get("D0")); // Data inizio esercizio
const TDate fa(esc.get("D1")); // Data fine esercizio
TString16 sanno(esc.get("CODTAB")); sanno.cut(4);
const int anno = atoi(sanno);
if (d >= ia && d <= fa)
return anno;
if (prevesc) *prevesc = anno;
}
return 0;
}
///////////////////////////////////////////////////////////
// Movimento di prima nota
///////////////////////////////////////////////////////////
TMovimentoPN::TMovimentoPN()
: TRelation(LF_MOV), _oldcg(0), _oldiva(0)
{
add(LF_RMOV, "NUMREG=NUMREG");
add(LF_RMOVIVA, "NUMREG=NUMREG");
}
void TMovimentoPN::destroy_rows()
{
_cg.destroy();
_iva.destroy();
}
TRectype& TMovimentoPN::cg(int i)
{
TRectype* r = (TRectype*)_cg.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_RMOV);
_cg.add(r, i);
}
return *r;
}
TRectype& TMovimentoPN::iva(int i)
{
TRectype* r = (TRectype*)_iva.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_RMOVIVA);
_iva.add(r, i);
}
return *r;
}
int TMovimentoPN::read_mov_rows()
{
const TLocalisamfile& rm = lfile(LF_RMOV);
const TLocalisamfile& ri = lfile(LF_RMOVIVA);
position_rels();
destroy_rows();
for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV))
{
const int row = rm.get_int(RMV_NUMRIG) - 1;
cg(row) = rm.curr();
}
_oldcg = cg_items();
for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA))
{
const int row = ri.get_int(RMI_NUMRIG) - 1;
iva(row) = ri.curr();
}
_oldiva = iva_items();
return NOERR;
}
int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate)
{
int err = file().read(op, lockop, atdate);
if (err == NOERR)
{
_olddate = file().get("DATAREG");
err = read_mov_rows();
}
return err;
}
int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
{
const bool scrivi = re ? (f.rewrite(rec) != NOERR) : TRUE;
if (scrivi)
f.write(rec);
#ifdef TRC
const long numreg = rec.get_long("NUMREG");
const int numrig = f.num() == LF_MOV ? 0 : rec.get_int("NUMRIG");
TRACE("write file=%d record=%ld nummov=%ld numrig=%d status=%d",
f.num(), f.recno(), numreg, numrig, f.status());
#endif
return f.status();
}
int TMovimentoPN::cancella(TLocalisamfile& f, int da, int a)
{
const long numreg = lfile().get_long(MOV_NUMREG);
for (int i = da; i <= a; i++)
{
f.put(MOV_NUMREG, numreg);
f.put(RMV_NUMRIG, i);
if (f.read(_isequal, _lock) == NOERR)
f.remove();
}
return f.status();
}
char TMovimentoPN::frequenza_versamenti(int year) const
{
static int last_year = 0;
static char last_freq = ' ';
if (year != last_year)
{
TString16 key;
key << year;
TTable lia("LIA");
lia.setkey(1);
lia.put("CODTAB", key);
if (lia.read() != NOERR)
{
TLocalisamfile nditte(LF_NDITTE);
nditte.setkey(1);
nditte.put("CODDITTA", main_app().get_firm());
nditte.read();
last_freq = nditte.get_char("FREQVIVA");
}
else
last_freq = lia.get_char("S7");
CHECK(last_freq == 'M' || last_freq == 'T', "Frequenza versamenti IVA assurda");
}
return last_freq;
}
int TMovimentoPN::date2liq(const TDate& data) const
{
const int anno = data.year();
int mese = data.month();
if (frequenza_versamenti(anno) == 'T')
mese += 2 - ((mese-1) % 3);
return mese;
}
bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
{
bool calcolata = FALSE;
const int anno = data.year();
const int mese = date2liq(data);
// Chiave di LIM: Anno (1-4), Mese (5-6)
TString16 key;
key << anno << mese;
TTable lim("LIM");
lim.setkey(1);
lim.put("CODTAB", key);
if (lim.read() == NOERR)
calcolata = lim.get_bool("B1"); // Controlla se calcolata in definitivo
if (reset && lim.get_bool("B0"))
{
// Resetta i flag di calcolato sulla liquidazione IVA del mese di registrazione
lim.put("B0", FALSE); // calcolato
lim.put("B1", FALSE); // definitivo
lim.rewrite();
}
return calcolata;
}
int TMovimentoPN::registra(bool re, bool force)
{
TLocalisamfile& m = lfile();
const int err = write_rec(re, m.curr(), m);
if (err != NOERR) return err;
TLocalisamfile& rm = lfile(LF_RMOV);
TLocalisamfile& ri = lfile(LF_RMOVIVA);
const long numreg = m.get_long("NUMREG");
for (int i = 0 ; i < cg_items(); i++)
{
if (!re) cg(i).put("NUMREG", numreg);
const int err = write_rec(re, cg(i), rm);
if (!force && err != NOERR) return err;
}
if (i < _oldcg)
cancella(rm, i+1, _oldcg);
_oldcg = cg_items();
const int annoiva = m.get_int("ANNOIVA");
const TString16 reg(m.get("REG"));
TRegistro registro(reg, annoiva);
const bool att_mista = reg.empty() ? FALSE : registro.attivita_mista();
for (i = 0 ; i < iva_items(); i++)
{
TRectype& r = iva(i);
if (!re) r.put("NUMREG", numreg); // Force correct number
int tipoatt = 1;
if (att_mista)
{
const char tipo = r.get_char("TIPOC");
if (tipo <= ' ')
{
TBill c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO"));
tipoatt = c.tipo_att();
}
}
r.put("TIPOATT", tipoatt);
const int err = write_rec(re, r, ri);
if (!force && err != NOERR) return err;
}
if (i < _oldiva)
cancella(ri, i+1, _oldiva);
_oldiva = iva_items();
// Aggiorna data registrazione e protocollo IVA sul registro
const TDate datareg(m.get("DATAREG"));
if (reg.not_empty())
{
const long protiva = m.get_long("PROTIVA");
const long uprotiva = m.get_long("UPROTIVA");
registro.update(max(protiva, uprotiva), datareg);
}
// Aggiorna flags di ricalcolo liquidazione
controlla_liquidazione(datareg, TRUE);
if (re && datareg != _olddate)
controlla_liquidazione(_olddate, TRUE);
const int att = att_mista ? 2 : 1;
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
TTable plm("PLM");
plm.setkey(1);
for (int a = 1; a <= att; a++)
{
TString16 chiave;
chiave << annoiva << registro.attivita() << a << date2liq(datareg);
plm.put("CODTAB", chiave);
if (plm.read() == NOERR)
{
const bool calcolato = plm.get_bool("B0");
if (calcolato)
{
plm.put("B0", FALSE);
plm.rewrite();
}
}
}
return err;
}
int TMovimentoPN::write(bool force, TDate&)
{
const TRectype& r = lfile().curr();
_oldcg = _oldiva = 0;
int err = registra(FALSE, force);
return err;
}
int TMovimentoPN::rewrite(bool force, TDate&)
{
return registra(TRUE, force);
}
int TMovimentoPN::remove(TDate&)
{
TLocalisamfile& m = lfile();
TLocalisamfile& rm = lfile(LF_RMOV);
TLocalisamfile& ri = lfile(LF_RMOVIVA);
cancella(rm, 1, _oldcg);
cancella(ri, 1, _oldiva);
m.remove();
_oldcg = _oldiva = 0;
return m.status();
}

View File

@ -1,267 +1,267 @@
PAGE "RIGA IVA" -1 -1 78 13
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 1 "@BImposta"
END
STRING 102 4
BEGIN
PROMPT 2 2 "IVA "
HELP "Codice IVA della riga"
FLAGS "U"
USE %IVA
INPUT CODTAB 102
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "%@6" R0
DISPLAY "Tipo" S1
OUTPUT 102 CODTAB
OUTPUT 211 S0
CHECKTYPE NORMAL
WARNING "Codice IVA assente"
VALIDATE ZEROFILL_FUNC 2
END
STRING 211 58
BEGIN
PROMPT 16 2 ""
FLAGS "D"
END
NUMBER 103 1
BEGIN
PROMPT 2 3 "Detraibilita' "
HELP "Indicare il tipo di detraibilita' della riga"
SHEET "Codice|Tipo detraibilita'@75"
INPUT 103
ITEM " |Regime normale"
ITEM "1|IVA indetraibile su acquisti riferiti a ricavi esenti"
ITEM "3|IVA indicata per passaggi interni al solo fine del calcolo di ventilazione"
ITEM "9|IVA non detraibile per l'articolo 19"
OUTPUT 103
OUTPUT 130
END
STRING 130 75 52
BEGIN
PROMPT 22 3 ""
FLAGS "D"
END
NUMBER 101 15
BEGIN
PROMPT 2 4 "Imponibile "
HELP "Importo imponibile"
FLAGS "RV"
PICTURE "."
END
NUMBER 104 15
BEGIN
PROMPT 48 4 "Imposta "
HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo"
FLAGS "RV"
PICTURE "."
END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 6 "@BConto"
END
LIST 106 1 12
BEGIN
PROMPT 2 7 "Tipo "
HELP "Tipo del conto"
FIELD TMCF
ITEM " |Conto"
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
ITEM "C|Cliente"
MESSAGE SHOW,209|HIDE,109|HIDE,309|SHOW,210|HIDE,110|HIDE,310
ITEM "F|Fornitore"
MESSAGE SHOW,309|HIDE,109|HIDE,209|SHOW,310|HIDE,110|HIDE,210
FLAGS "U"
END
NUMBER 107 3
BEGIN
PROMPT 22 7 "Gruppo "
HELP "Codice del gruppo"
FIELD GRUPPO
END
NUMBER 108 3
BEGIN
PROMPT 38 7 "Conto "
HELP "Codice del conto"
FIELD CONTO
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 107
INPUT CONTO 108
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TMCF
OUTPUT 106 TMCF
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 110 DESCR
ADD RUN cg0 -0
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
CHECKTYPE NORMAL
WARNING "Conto assente"
END
NUMBER 109 6
BEGIN
PROMPT 55 7 "Sottoconto "
HELP "Codice del sottoconto"
FIELD SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 107
INPUT CONTO 108
INPUT SOTTOCONTO 109
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "C/R" TIPOSPRIC
OUTPUT 109 SOTTOCONTO
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 110 DESCR
ADD RUN cg0 -0
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 101
WARNING "Sottoconto assente"
END
NUMBER 209 6
BEGIN
PROMPT 55 7 "Cliente "
HELP "Codice del cliente"
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF 209
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
OUTPUT 209 CODCF
OUTPUT 210 RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1
MESSAGE COPY,109
VALIDATE REQIF_FUNC 1 101
WARNING "Cliente assente"
END
NUMBER 309 6
BEGIN
PROMPT 55 7 "Fornitore "
HELP "Codice del fornitore"
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF 309
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 309 CODCF
OUTPUT 310 RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1
MESSAGE COPY,109
VALIDATE REQIF_FUNC 1 101
WARNING "Fornitore assente"
END
STRING 110 50
BEGIN
PROMPT 2 8 "Descrizione "
HELP "Descrizione del conto"
FIELD LF_PCON->DESCR
USE LF_PCON KEY 2
INPUT DESCR 110
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT 109
CHECKTYPE NORMAL
ADD RUN cg0 -0
END
STRING 210 50
BEGIN
PROMPT 2 8 "Cliente "
HELP "Ragione sociale del cliente"
FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC 210
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 209
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
END
STRING 310 50
BEGIN
PROMPT 2 8 "Fornitore "
HELP "Ragione sociale del forntore"
FIELD LF_PCON->SOTTOCONTO
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC 310
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 309
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
END
LIST 105 1 53
BEGIN
PROMPT 2 9 "Tipo Costo/Ricavo "
ITEM " |0. Acquisti o vendite in genere"
ITEM "1|1. Acquisti beni per rivendita"
ITEM "2|2. Acquisti beni ammortizzabili"
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
ITEM "4|4. Vendita beni strumentali art. 17"
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese generali"
FLAGS "D"
HELP "Tipo Costo/Ricavo del conto"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
ENDPAGE
ENDMASK
PAGE "RIGA IVA" -1 -1 78 13
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 1 "@BImposta"
END
STRING 102 4
BEGIN
PROMPT 2 2 "IVA "
HELP "Codice IVA della riga"
FLAGS "U"
USE %IVA
INPUT CODTAB 102
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "%@6" R0
DISPLAY "Tipo" S1
OUTPUT 102 CODTAB
OUTPUT 211 S0
CHECKTYPE NORMAL
WARNING "Codice IVA assente"
VALIDATE ZEROFILL_FUNC 2
END
STRING 211 58
BEGIN
PROMPT 16 2 ""
FLAGS "D"
END
NUMBER 103 1
BEGIN
PROMPT 2 3 "Detraibilita' "
HELP "Indicare il tipo di detraibilita' della riga"
SHEET "Codice|Tipo detraibilita'@75"
INPUT 103
ITEM " |Regime normale"
ITEM "1|IVA indetraibile su acquisti riferiti a ricavi esenti"
ITEM "3|IVA indicata per passaggi interni al solo fine del calcolo di ventilazione"
ITEM "9|IVA non detraibile per l'articolo 19"
OUTPUT 103
OUTPUT 130
END
STRING 130 75 52
BEGIN
PROMPT 22 3 ""
FLAGS "D"
END
NUMBER 101 15
BEGIN
PROMPT 2 4 "Imponibile "
HELP "Importo imponibile"
FLAGS "RV"
PICTURE "."
END
NUMBER 104 15
BEGIN
PROMPT 48 4 "Imposta "
HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo"
FLAGS "RV"
PICTURE "."
END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 6 "@BConto"
END
LIST 106 1 12
BEGIN
PROMPT 2 7 "Tipo "
HELP "Tipo del conto"
FIELD TMCF
ITEM " |Conto"
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
ITEM "C|Cliente"
MESSAGE SHOW,209|HIDE,109|HIDE,309|SHOW,210|HIDE,110|HIDE,310
ITEM "F|Fornitore"
MESSAGE SHOW,309|HIDE,109|HIDE,209|SHOW,310|HIDE,110|HIDE,210
FLAGS "U"
END
NUMBER 107 3
BEGIN
PROMPT 22 7 "Gruppo "
HELP "Codice del gruppo"
FIELD GRUPPO
END
NUMBER 108 3
BEGIN
PROMPT 38 7 "Conto "
HELP "Codice del conto"
FIELD CONTO
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 107
INPUT CONTO 108
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo" TMCF
OUTPUT 106 TMCF
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 110 DESCR
ADD RUN cg0 -0
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
CHECKTYPE NORMAL
WARNING "Conto assente"
END
NUMBER 109 6
BEGIN
PROMPT 55 7 "Sottoconto "
HELP "Codice del sottoconto"
FIELD SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 107
INPUT CONTO 108
INPUT SOTTOCONTO 109
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "C/R" TIPOSPRIC
OUTPUT 109 SOTTOCONTO
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 110 DESCR
ADD RUN cg0 -0
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 101
WARNING "Sottoconto assente"
END
NUMBER 209 6
BEGIN
PROMPT 55 7 "Cliente "
HELP "Codice del cliente"
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF 209
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
OUTPUT 209 CODCF
OUTPUT 210 RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1
MESSAGE COPY,109
VALIDATE REQIF_FUNC 1 101
WARNING "Cliente assente"
END
NUMBER 309 6
BEGIN
PROMPT 55 7 "Fornitore "
HELP "Codice del fornitore"
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF 309
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT 107 GRUPPO
OUTPUT 108 CONTO
OUTPUT 309 CODCF
OUTPUT 310 RAGSOC
CHECKTYPE NORMAL
ADD RUN cg0 -1
MESSAGE COPY,109
VALIDATE REQIF_FUNC 1 101
WARNING "Fornitore assente"
END
STRING 110 50
BEGIN
PROMPT 2 8 "Descrizione "
HELP "Descrizione del conto"
FIELD LF_PCON->DESCR
USE LF_PCON KEY 2
INPUT DESCR 110
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT 109
CHECKTYPE NORMAL
ADD RUN cg0 -0
END
STRING 210 50
BEGIN
PROMPT 2 8 "Cliente "
HELP "Ragione sociale del cliente"
FIELD LF_CLIFO->RAGSOC
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC 210
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 209
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
END
STRING 310 50
BEGIN
PROMPT 2 8 "Fornitore "
HELP "Ragione sociale del forntore"
FIELD LF_PCON->SOTTOCONTO
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC 310
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT 309
MESSAGE COPY,110
ADD RUN cg0 -1
CHECKTYPE NORMAL
END
LIST 105 1 53
BEGIN
PROMPT 2 9 "Tipo Costo/Ricavo "
ITEM " |0. Acquisti o vendite in genere"
ITEM "1|1. Acquisti beni per rivendita"
ITEM "2|2. Acquisti beni ammortizzabili"
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
ITEM "4|4. Vendita beni strumentali art. 17"
ITEM "5|5. Beni per rivendita da non ventilare"
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese generali"
FLAGS "D"
HELP "Tipo Costo/Ricavo del conto"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
ENDPAGE
ENDMASK

View File

@ -1,423 +1,423 @@
// Rinumerazione movimenti e saldi
// fv 12/12/93
// -------------------------------------------------------------------------
// *TBI* Partenza dall'ultimo movimento stampato
// *TBI* Aggiornamento scadenziario
// *TBI* Aggiornamento cespiti
// -------------------------------------------------------------------------
#include <signal.h>
#include <stdlib.h>
#include <applicat.h>
#include <isam.h>
#include <mask.h>
#include <progind.h>
#include <sort.h>
#include <urldefid.h>
#include <utility.h>
#define FLD_CG41_YEAR 100
#define MAX_CNT 300
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
#include <saldi.h>
#include <causali.h>
#include "cglib.h"
struct therec {
char DATAREG[9];
char REG[4];
char DATADOC[9];
char NUMPROT[9];
char ANNOES[5];
char NUMREG[8];
};
class CG4100_App : public TApplication
{
TString _year;
char _optype;
TMask* _msk;
public:
virtual bool create();
virtual bool destroy();
bool set_parms();
virtual bool menu(MENU_TAG m);
void restore_mov(TSystemisamfile& a, TSystemisamfile& b, TSystemisamfile& c);
void sort_all();
bool sort_mov();
bool sort_sal();
CG4100_App() : TApplication(), _year(4), _optype('S') {}
virtual ~CG4100_App() {}
};
bool CG4100_App::create()
{
TApplication::create();
// UNIX: signal() per intercettare errori
#if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_IGN);
#endif
if (fexist("__sal__.sav"))
warning_box("Un'operazione di riordino saldi si e' conclusa"
" impropriamente. Si raccomanda di rieseguirla");
if (fexist("__mov__.sav"))
warning_box("Un'operazione di riordino movimenti si e' conclusa"
" impropriamente. Si raccomanda di rieseguirla");
if (argc() > 2)
_optype = toupper(argv(2)[0]);
_msk = new TMask(_optype == 'S' ? "cg4100b" : "cg4100a");
dispatch_e_menu(MENU_ITEM(1));
return TRUE;
}
bool CG4100_App::destroy()
{
// UNIX: resettare i segnali
#if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_DFL);
#endif
delete _msk;
return TApplication::destroy();
}
bool CG4100_App::set_parms()
{
_msk->run();
if (_optype == 'S')
_year = _msk->get(FLD_CG41_YEAR);
else
_year = 0;
return _msk->last_key() == K_ENTER;
}
bool CG4100_App::menu(MENU_TAG)
{
if (_optype == 'S')
sort_sal();
else
sort_mov();
return FALSE;
}
void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
TSystemisamfile& rmoviva)
{
long rn, rec;
if (fexist("__mov__.ind"))
{
// rebuild all indexes
mov.close(); rmov.close(); rmoviva.close();
mov.packfile(); rmov.packfile(); rmoviva.packfile();
mov.packindex(); rmov.packindex(); rmoviva.packindex();
remove("__mov__.ind");
return;
}
FILE* fp = fopen("__mov__.sav","r");
if (feof(fp))
{
warning_box("File di ripristino vuoto; il ripristino non e' necessario");
remove("__mov__.sav");
return;
};
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld %ld", &rn, &rec);
mov.readat(rec);
mov.put(MOV_NUMREG,rn);
mov.rewrite();
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld",&rec);
if (rec == -1l) break;
rmov.readat(rec);
rmov.put(RMV_NUMREG,rn);
rmov.rewrite();
}
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld",&rec);
if (rec == -1l) break;
rmoviva.readat(rec);
rmoviva.put(RMI_NUMREG,rn);
rmoviva.rewrite();
}
}
fclose(fp);
remove("__mov__.sav");
}
bool CG4100_App::sort_mov()
{
if (!set_parms())
return FALSE;
TSystemisamfile mov(LF_MOV);
TSystemisamfile rmov(LF_RMOV);
TSystemisamfile rmoviva(LF_RMOVIVA);
if (mov.open(_excllock) || rmov.open(_excllock) ||
rmoviva.open(_excllock))
{
warning_box("Gli archivi sono in uso. Operazione interrotta");
return FALSE;
}
mov.indexoff(); rmov.indexoff(); rmoviva.indexoff();
mov.first();
TSort sort(sizeof(struct therec));
if (fexist("__mov__.sav") || fexist("__mov__.ind"))
{
// previous operation failed
if (yesno_box("Un riordinamento precedente e' fallito.\n"
" Ripristino la situazione iniziale ora?" ))
restore_mov(mov, rmov, rmoviva);
else return FALSE;
}
therec rbuf;
sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 8);
sort.addsortkey(rbuf.REG - (char*)&rbuf, 3);
sort.addsortkey(rbuf.NUMPROT - (char*)&rbuf, 8);
sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 8);
sort.addsortkey(rbuf.NUMREG - (char*)&rbuf, 7);
sort.init();
TProgind prnd(mov.items(),
"Riordino archivio movimenti in corso\nOrdinamento file movimenti...",
FALSE,TRUE,30);
TString16 s;
while (!mov.eof())
{
do_events();
TDate d(mov.get(MOV_DATAREG));
strcpy(rbuf.DATAREG, d.string(ANSI));
strcpy(rbuf.REG, mov.get(MOV_REG));
d = mov.get(MOV_DATADOC);
s = mov.get(MOV_PROTIVA);
if (s.len() > 0 && isdigit(s[s.len() - 1])) s << " ";
s.right_just(8);
strcpy(rbuf.NUMPROT, (const char *) s);
strcpy(rbuf.DATADOC, d.string(ANSI));
strcpy(rbuf.ANNOES, mov.get(MOV_ANNOES));
strcpy(rbuf.NUMREG, mov.get(MOV_NUMREG));
sort.sort((char*)&rbuf);
mov.next();
prnd.addstatus(1);
}
sort.endsort();
prnd.setstatus(0);
prnd.set_text("Riordino archivio movimenti in corso\nRiscrittura file movimenti...");
therec* rr;
long num = 1;
TRecnotype recno;
while ((rr = (therec*)sort.retrieve()) != NULL)
{
do_events();
if (atol(rr->NUMREG) != num)
{
// find record
mov.curr().zero();
mov.put(MOV_NUMREG, rr->NUMREG);
mov.read();
// should never happen
CHECK(mov.good(), "Archivio movimenti inconsistente. Questo si' che e' un casino.");
// retrieve and change NUMREG
recno = mov.recno();
TString rgn = rr->NUMREG;
FILE* fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%s %d ", (const char*)rgn, recno);
fclose(fsav);
mov.put(MOV_NUMREG,num);
mov.rewriteat(recno);
// update linked records
rmov.curr().zero();
rmov.put(RMV_NUMREG,rgn);
rmov.read(_isgteq);
int row = 0;
while (!rmov.eof() && rgn == rmov.get(RMV_NUMREG) &&
row++ < rmov.get_int(RMV_NUMRIG))
{
recno = rmov.recno();
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", recno);
fclose(fsav);
rmov.put(RMV_NUMREG,num);
rmov.rewriteat(recno);
rmov.next();
}
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"-1"); fclose(fsav);
rmoviva.zero();
rmoviva.put(RMI_NUMREG,rgn);
rmoviva.read(_isgteq);
row = 0;
while (!rmoviva.eof() && rgn == rmoviva.get(RMV_NUMREG) &&
row++ < rmoviva.get_int(RMV_NUMRIG))
{
recno = rmoviva.recno();
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", recno);
fclose(fsav);
rmoviva.put(RMI_NUMREG,num);
rmoviva.rewriteat(recno);
rmoviva.next();
}
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"-1"); fclose(fsav);
}
num++;
prnd.addstatus(1);
}
remove("__mov__.sav");
FILE* fsav = fopen("__mov__.ind","w"); fclose(fsav);
prnd.set_text("Riordino archivio movimenti in corso\nRicostruzione files indice...");
// rebuild indexes
mov.close(); rmov.close(); rmoviva.close();
mov.indexon(); rmov.indexon(); rmoviva.indexon();
mov.packfile(); rmov.packfile(); rmoviva.packfile();
mov.packindex(); rmov.packindex(); rmoviva.packindex();
remove("__mov__.ind");
return TRUE;
}
bool CG4100_App::sort_sal()
{
if (!set_parms())
return FALSE;
FILE* fp = fopen ("__sal__.sav","w");
fclose(fp);
TLocalisamfile rmov(LF_RMOV);
TLocalisamfile mov(LF_MOV);
TLocalisamfile causali(LF_CAUSALI);
TSaldo_agg sal;
int gruppo, conto;
const int year = atoi(_year);
long oldnumreg = 0L, sottoconto;
TProgind prnd(rmov.items(),
"Riordino archivio saldi in corso\nLettura archivio movimenti...",
FALSE,TRUE,30);
causali.zero();
mov.setkey(1);
rmov.first();
sal.reset();
sal.set_anno_es(year);
sal.clear_saldi(year);
while (!rmov.eof())
{
if (_year == rmov.get(RMV_ANNOES))
{
const long numreg = rmov.get_long(RMV_NUMREG);
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
if (numreg != oldnumreg)
{
oldnumreg = numreg;
mov.zero();
mov.put(MOV_NUMREG, numreg);
mov.read();
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
const char* codcaus = mov.get(MOV_CODCAUS);
// cerca causale
causali.zero();
if (*codcaus)
{
causali.put(CAU_CODCAUS, codcaus);
causali.read();
CHECK(causali.good(),"Archivi causali e movimenti inconsistenti");
}
}
const char sezione = rmov.get(RMV_SEZIONE)[0];
real importo(rmov.get(RMV_IMPORTO));
sal.set_movap(causali.get(CAU_MOVAP) == "A");
sal.set_movprovv(mov.get(MOV_PROVVIS).not_empty());
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione);
if (sal.items() > MAX_CNT)
{
sal.registra();
sal.reset();
sal.set_anno_es(atoi(_year));
}
}
rmov.next();
prnd.addstatus(1);
do_events();
}
if (sal.items() > 0)
sal.registra();
remove("__sal__.sav");
return TRUE;
}
int cg4100(int argc, char* argv[])
{
CG4100_App main_app;
main_app.run(argc, argv, "Ricalcolo Saldi");
return TRUE;
}
// Rinumerazione movimenti e saldi
// fv 12/12/93
// -------------------------------------------------------------------------
// *TBI* Partenza dall'ultimo movimento stampato
// *TBI* Aggiornamento scadenziario
// *TBI* Aggiornamento cespiti
// -------------------------------------------------------------------------
#include <signal.h>
#include <stdlib.h>
#include <applicat.h>
#include <isam.h>
#include <mask.h>
#include <progind.h>
#include <sort.h>
#include <urldefid.h>
#include <utility.h>
#define FLD_CG41_YEAR 100
#define MAX_CNT 300
#include <mov.h>
#include <rmov.h>
#include <rmoviva.h>
#include <saldi.h>
#include <causali.h>
#include "cglib.h"
struct therec {
char DATAREG[9];
char REG[4];
char DATADOC[9];
char NUMPROT[9];
char ANNOES[5];
char NUMREG[8];
};
class CG4100_App : public TApplication
{
TString _year;
char _optype;
TMask* _msk;
public:
virtual bool create();
virtual bool destroy();
bool set_parms();
virtual bool menu(MENU_TAG m);
void restore_mov(TSystemisamfile& a, TSystemisamfile& b, TSystemisamfile& c);
void sort_all();
bool sort_mov();
bool sort_sal();
CG4100_App() : TApplication(), _year(4), _optype('S') {}
virtual ~CG4100_App() {}
};
bool CG4100_App::create()
{
TApplication::create();
// UNIX: signal() per intercettare errori
#if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_IGN);
#endif
if (fexist("__sal__.sav"))
warning_box("Un'operazione di riordino saldi si e' conclusa"
" impropriamente. Si raccomanda di rieseguirla");
if (fexist("__mov__.sav"))
warning_box("Un'operazione di riordino movimenti si e' conclusa"
" impropriamente. Si raccomanda di rieseguirla");
if (argc() > 2)
_optype = toupper(argv(2)[0]);
_msk = new TMask(_optype == 'S' ? "cg4100b" : "cg4100a");
dispatch_e_menu(MENU_ITEM(1));
return TRUE;
}
bool CG4100_App::destroy()
{
// UNIX: resettare i segnali
#if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_DFL);
#endif
delete _msk;
return TApplication::destroy();
}
bool CG4100_App::set_parms()
{
_msk->run();
if (_optype == 'S')
_year = _msk->get(FLD_CG41_YEAR);
else
_year = 0;
return _msk->last_key() == K_ENTER;
}
bool CG4100_App::menu(MENU_TAG)
{
if (_optype == 'S')
sort_sal();
else
sort_mov();
return FALSE;
}
void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
TSystemisamfile& rmoviva)
{
long rn, rec;
if (fexist("__mov__.ind"))
{
// rebuild all indexes
mov.close(); rmov.close(); rmoviva.close();
mov.packfile(); rmov.packfile(); rmoviva.packfile();
mov.packindex(); rmov.packindex(); rmoviva.packindex();
remove("__mov__.ind");
return;
}
FILE* fp = fopen("__mov__.sav","r");
if (feof(fp))
{
warning_box("File di ripristino vuoto; il ripristino non e' necessario");
remove("__mov__.sav");
return;
};
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld %ld", &rn, &rec);
mov.readat(rec);
mov.put(MOV_NUMREG,rn);
mov.rewrite();
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld",&rec);
if (rec == -1l) break;
rmov.readat(rec);
rmov.put(RMV_NUMREG,rn);
rmov.rewrite();
}
for (;;)
{
if (feof(fp)) break;
fscanf(fp,"%ld",&rec);
if (rec == -1l) break;
rmoviva.readat(rec);
rmoviva.put(RMI_NUMREG,rn);
rmoviva.rewrite();
}
}
fclose(fp);
remove("__mov__.sav");
}
bool CG4100_App::sort_mov()
{
if (!set_parms())
return FALSE;
TSystemisamfile mov(LF_MOV);
TSystemisamfile rmov(LF_RMOV);
TSystemisamfile rmoviva(LF_RMOVIVA);
if (mov.open(_excllock) || rmov.open(_excllock) ||
rmoviva.open(_excllock))
{
warning_box("Gli archivi sono in uso. Operazione interrotta");
return FALSE;
}
mov.indexoff(); rmov.indexoff(); rmoviva.indexoff();
mov.first();
TSort sort(sizeof(struct therec));
if (fexist("__mov__.sav") || fexist("__mov__.ind"))
{
// previous operation failed
if (yesno_box("Un riordinamento precedente e' fallito.\n"
" Ripristino la situazione iniziale ora?" ))
restore_mov(mov, rmov, rmoviva);
else return FALSE;
}
therec rbuf;
sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 8);
sort.addsortkey(rbuf.REG - (char*)&rbuf, 3);
sort.addsortkey(rbuf.NUMPROT - (char*)&rbuf, 8);
sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 8);
sort.addsortkey(rbuf.NUMREG - (char*)&rbuf, 7);
sort.init();
TProgind prnd(mov.items(),
"Riordino archivio movimenti in corso\nOrdinamento file movimenti...",
FALSE,TRUE,30);
TString16 s;
while (!mov.eof())
{
do_events();
TDate d(mov.get(MOV_DATAREG));
strcpy(rbuf.DATAREG, d.string(ANSI));
strcpy(rbuf.REG, mov.get(MOV_REG));
d = mov.get(MOV_DATADOC);
s = mov.get(MOV_PROTIVA);
if (s.len() > 0 && isdigit(s[s.len() - 1])) s << " ";
s.right_just(8);
strcpy(rbuf.NUMPROT, (const char *) s);
strcpy(rbuf.DATADOC, d.string(ANSI));
strcpy(rbuf.ANNOES, mov.get(MOV_ANNOES));
strcpy(rbuf.NUMREG, mov.get(MOV_NUMREG));
sort.sort((char*)&rbuf);
mov.next();
prnd.addstatus(1);
}
sort.endsort();
prnd.setstatus(0);
prnd.set_text("Riordino archivio movimenti in corso\nRiscrittura file movimenti...");
therec* rr;
long num = 1;
TRecnotype recno;
while ((rr = (therec*)sort.retrieve()) != NULL)
{
do_events();
if (atol(rr->NUMREG) != num)
{
// find record
mov.curr().zero();
mov.put(MOV_NUMREG, rr->NUMREG);
mov.read();
// should never happen
CHECK(mov.good(), "Archivio movimenti inconsistente. Questo si' che e' un casino.");
// retrieve and change NUMREG
recno = mov.recno();
TString rgn = rr->NUMREG;
FILE* fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%s %d ", (const char*)rgn, recno);
fclose(fsav);
mov.put(MOV_NUMREG,num);
mov.rewriteat(recno);
// update linked records
rmov.curr().zero();
rmov.put(RMV_NUMREG,rgn);
rmov.read(_isgteq);
int row = 0;
while (!rmov.eof() && rgn == rmov.get(RMV_NUMREG) &&
row++ < rmov.get_int(RMV_NUMRIG))
{
recno = rmov.recno();
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", recno);
fclose(fsav);
rmov.put(RMV_NUMREG,num);
rmov.rewriteat(recno);
rmov.next();
}
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"-1"); fclose(fsav);
rmoviva.zero();
rmoviva.put(RMI_NUMREG,rgn);
rmoviva.read(_isgteq);
row = 0;
while (!rmoviva.eof() && rgn == rmoviva.get(RMV_NUMREG) &&
row++ < rmoviva.get_int(RMV_NUMRIG))
{
recno = rmoviva.recno();
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", recno);
fclose(fsav);
rmoviva.put(RMI_NUMREG,num);
rmoviva.rewriteat(recno);
rmoviva.next();
}
fsav = fopen("__mov__.sav","a");
fprintf(fsav,"-1"); fclose(fsav);
}
num++;
prnd.addstatus(1);
}
remove("__mov__.sav");
FILE* fsav = fopen("__mov__.ind","w"); fclose(fsav);
prnd.set_text("Riordino archivio movimenti in corso\nRicostruzione files indice...");
// rebuild indexes
mov.close(); rmov.close(); rmoviva.close();
mov.indexon(); rmov.indexon(); rmoviva.indexon();
mov.packfile(); rmov.packfile(); rmoviva.packfile();
mov.packindex(); rmov.packindex(); rmoviva.packindex();
remove("__mov__.ind");
return TRUE;
}
bool CG4100_App::sort_sal()
{
if (!set_parms())
return FALSE;
FILE* fp = fopen ("__sal__.sav","w");
fclose(fp);
TLocalisamfile rmov(LF_RMOV);
TLocalisamfile mov(LF_MOV);
TLocalisamfile causali(LF_CAUSALI);
TSaldo_agg sal;
int gruppo, conto;
const int year = atoi(_year);
long oldnumreg = 0L, sottoconto;
TProgind prnd(rmov.items(),
"Riordino archivio saldi in corso\nLettura archivio movimenti...",
FALSE,TRUE,30);
causali.zero();
mov.setkey(1);
rmov.first();
sal.reset();
sal.set_anno_es(year);
sal.clear_saldi(year);
while (!rmov.eof())
{
if (_year == rmov.get(RMV_ANNOES))
{
const long numreg = rmov.get_long(RMV_NUMREG);
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
if (numreg != oldnumreg)
{
oldnumreg = numreg;
mov.zero();
mov.put(MOV_NUMREG, numreg);
mov.read();
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
const char* codcaus = mov.get(MOV_CODCAUS);
// cerca causale
causali.zero();
if (*codcaus)
{
causali.put(CAU_CODCAUS, codcaus);
causali.read();
CHECK(causali.good(),"Archivi causali e movimenti inconsistenti");
}
}
const char sezione = rmov.get(RMV_SEZIONE)[0];
real importo(rmov.get(RMV_IMPORTO));
sal.set_movap(causali.get(CAU_MOVAP) == "A");
sal.set_movprovv(mov.get(MOV_PROVVIS).not_empty());
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione);
if (sal.items() > MAX_CNT)
{
sal.registra();
sal.reset();
sal.set_anno_es(atoi(_year));
}
}
rmov.next();
prnd.addstatus(1);
do_events();
}
if (sal.items() > 0)
sal.registra();
remove("__sal__.sav");
return TRUE;
}
int cg4100(int argc, char* argv[])
{
CG4100_App main_app;
main_app.run(argc, argv, "Ricalcolo Saldi");
return TRUE;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,141 +1,141 @@
#ifndef __CGLIB_H
#define __CGLIB_H
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif
#ifndef __DATE_H
#include <date.h>
#endif
#include <assoc.h>
#include "conto.h"
//TLocalisamfile * get_descr_cf(TLocalisamfile * pconti,TLocalisamfile * clifo , int g, int c, long s);
class TSaldi_list : public TAssoc_array
{
public:
TSaldi_list (int g, int c, int aec, int aep=0);
TRectype* saldi() const;
};
#define Saldo TSaldo
enum tipobil { DataLimite=1, UltimaImmissione };
class TSaldo
{
real _saldo, _saldo_iniziale;
real _prg_dare, _prg_avere, _prg_daresca, _prg_averesca;
int _indbil;
TRectype _saldo_ep;
int _annoes;
TDate _inizioEs, _fineEs;
TString16 _codcaus;
TDate _datareg;
TDate _datacomp;
TString _provv;
bool _movimentato;
bool _significativo;
bool _rec_presente_ec;
bool _rec_presente_ep;
protected:
void InFinEs(int);
void leggi_mov(long numreg); // Leggi testata
real calcola_saldo_iniziale(int g, int c, long s, int indbil);
public:
bool movimentato() const { return _movimentato; }
bool significativo() const { return _significativo; }
bool esiste_saldo() const { return _rec_presente_ec || _rec_presente_ep;}
const int EsePre (const int annocorr); // Determina esercizio precedente
int annoes () const { return _annoes; }
void set_annoes (int anno) { _annoes = anno; }
bool causale_mov(long, const TDate&, const TDate&, TString&);
const char* causale_chiusura_es();
const char* causale_apertura_es();
bool ultima_immissione_bilancio(int anno,int g,int c,long s,int indbil);
bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil);
bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,bool);
TRectype& ricerca_progr_prec(int, int, int, long);
real saldofin_esprec(int,int,int,long);
bool prg_attuali(int,TConto&,real&,real&);
bool prg_mov_eliminati(int,TConto&,real&,real&);
const real& saldo() const { return _saldo;}
const real& saldoini() const { return _saldo_iniziale;}
const real& prgdare() const { return _prg_dare;}
const real& prgavere() const { return _prg_avere;}
bool prg_attuali(int,TConto&,int,real&,real&);
bool prg_mov_eliminati(int,TConto&,int,real&,real&);
Saldo();
~Saldo();
};
class TTab_conti : public TAssoc_array
{
void do_agg(TConto* tc, int anno_es, const real& importo, char sezione,
bool movap, bool provv, bool somma, const char* key);
public:
void aggiorna_conto(const TConto& tc, int anno_es, const real& importo,
char sezione, bool movap, bool provv, bool somma);
void aggiorna_conto (int gruppo, int conto, long sottoconto, int anno_es,
const real& importo, char sezione, bool movap,
bool provv, bool somma);
};
class TSaldo_agg : public TObject
{
TTab_conti _tab_conti;
bool _movap; // se e' mov. d'apertura (aggiorno SALDO e FLAGSALINI in
// saldi)
bool _provv;
int _anno_es; // anno esercizio
TDate _data_ulmov; // data ultimo movimento
long _num_ulmov; // numero ultimo movimento
TRectype * _rec; // record corrente sui saldi
THash_object * tconti() { return _tab_conti.get_hashobj(); }
public:
void clear_saldi(int year);
void registra();
void aggiorna (const TConto& tc, const real& importo, char sezione,
bool somma=TRUE);
void aggiorna (int gruppo, int conto, long sottoconto, const real& importo,
char sezione, bool somma=TRUE);
void set_anno_es(int anno) { _anno_es = anno; }
int anno_es() const { return _anno_es; }
void set_movap (bool movap) { _movap = movap; }
bool movap() const { return _movap; }
void set_movprovv (bool p) { _provv = p; }
bool movprovv() const { return _provv; }
void set_data_ulmov (const TDate& data) { _data_ulmov = data; }
const TDate& data_ulmov() const { return _data_ulmov; }
void set_num_ulmov (long num) { _num_ulmov = num; }
long num_ulmov() const { return _num_ulmov; }
void reset(); // pulisce l'array dei conti
TSaldo_agg();
int items() const { return _tab_conti.items();}
};
#endif
#ifndef __CGLIB_H
#define __CGLIB_H
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif
#ifndef __DATE_H
#include <date.h>
#endif
#include <assoc.h>
#include "conto.h"
//TLocalisamfile * get_descr_cf(TLocalisamfile * pconti,TLocalisamfile * clifo , int g, int c, long s);
class TSaldi_list : public TAssoc_array
{
public:
TSaldi_list (int g, int c, int aec, int aep=0);
TRectype* saldi() const;
};
#define Saldo TSaldo
enum tipobil { DataLimite=1, UltimaImmissione };
class TSaldo
{
real _saldo, _saldo_iniziale;
real _prg_dare, _prg_avere, _prg_daresca, _prg_averesca;
int _indbil;
TRectype _saldo_ep;
int _annoes;
TDate _inizioEs, _fineEs;
TString16 _codcaus;
TDate _datareg;
TDate _datacomp;
TString _provv;
bool _movimentato;
bool _significativo;
bool _rec_presente_ec;
bool _rec_presente_ep;
protected:
void InFinEs(int);
void leggi_mov(long numreg); // Leggi testata
real calcola_saldo_iniziale(int g, int c, long s, int indbil);
public:
bool movimentato() const { return _movimentato; }
bool significativo() const { return _significativo; }
bool esiste_saldo() const { return _rec_presente_ec || _rec_presente_ep;}
const int EsePre (const int annocorr); // Determina esercizio precedente
int annoes () const { return _annoes; }
void set_annoes (int anno) { _annoes = anno; }
bool causale_mov(long, const TDate&, const TDate&, TString&);
const char* causale_chiusura_es();
const char* causale_apertura_es();
bool ultima_immissione_bilancio(int anno,int g,int c,long s,int indbil);
bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil);
bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,bool);
TRectype& ricerca_progr_prec(int, int, int, long);
real saldofin_esprec(int,int,int,long);
bool prg_attuali(int,TConto&,real&,real&);
bool prg_mov_eliminati(int,TConto&,real&,real&);
const real& saldo() const { return _saldo;}
const real& saldoini() const { return _saldo_iniziale;}
const real& prgdare() const { return _prg_dare;}
const real& prgavere() const { return _prg_avere;}
bool prg_attuali(int,TConto&,int,real&,real&);
bool prg_mov_eliminati(int,TConto&,int,real&,real&);
Saldo();
~Saldo();
};
class TTab_conti : public TAssoc_array
{
void do_agg(TConto* tc, int anno_es, const real& importo, char sezione,
bool movap, bool provv, bool somma, const char* key);
public:
void aggiorna_conto(const TConto& tc, int anno_es, const real& importo,
char sezione, bool movap, bool provv, bool somma);
void aggiorna_conto (int gruppo, int conto, long sottoconto, int anno_es,
const real& importo, char sezione, bool movap,
bool provv, bool somma);
};
class TSaldo_agg : public TObject
{
TTab_conti _tab_conti;
bool _movap; // se e' mov. d'apertura (aggiorno SALDO e FLAGSALINI in
// saldi)
bool _provv;
int _anno_es; // anno esercizio
TDate _data_ulmov; // data ultimo movimento
long _num_ulmov; // numero ultimo movimento
TRectype * _rec; // record corrente sui saldi
THash_object * tconti() { return _tab_conti.get_hashobj(); }
public:
void clear_saldi(int year);
void registra();
void aggiorna (const TConto& tc, const real& importo, char sezione,
bool somma=TRUE);
void aggiorna (int gruppo, int conto, long sottoconto, const real& importo,
char sezione, bool somma=TRUE);
void set_anno_es(int anno) { _anno_es = anno; }
int anno_es() const { return _anno_es; }
void set_movap (bool movap) { _movap = movap; }
bool movap() const { return _movap; }
void set_movprovv (bool p) { _provv = p; }
bool movprovv() const { return _provv; }
void set_data_ulmov (const TDate& data) { _data_ulmov = data; }
const TDate& data_ulmov() const { return _data_ulmov; }
void set_num_ulmov (long num) { _num_ulmov = num; }
long num_ulmov() const { return _num_ulmov; }
void reset(); // pulisce l'array dei conti
TSaldo_agg();
int items() const { return _tab_conti.items();}
};
#endif

View File

@ -1,256 +1,256 @@
/////////////////////////////////////////////////////////////////////////////
// cglib02.cpp
//
// Aggiornamento saldi
//
/////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <isam.h>
#include <utility.h>
#include <saldi.h>
#include "conto.h"
#include "cglib.h"
void TTab_conti::do_agg(TConto* tc, int anno_es, const real& importo,
char sezione, bool movap, bool provv, bool somma, const char* key)
{
real i = somma ? importo : -importo;
if (movap)
{
if (sezione == 'D') tc->saldo() += i;
else tc->saldo() -= i;
}
else
if (provv)
{
if (sezione == 'D') tc->darepro() += i;
else tc->averepro() += i;
}
else
{
if (sezione == 'D') tc->dare() += i;
else tc->avere() += i;
}
// rimuovo dalla tabella il conto se dare e avere vanno a zero
if (tc->dare().is_zero() && tc->avere().is_zero() &&
tc->darepro().is_zero() && tc->averepro().is_zero() &&
tc->saldo().is_zero()) remove(key);
}
void TTab_conti::aggiorna_conto(const TConto& tcon, int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma)
{
TString80 key;
key << format("%4d", anno_es);
key << format("%3d", tcon.gruppo());
key << format("%3d", tcon.conto());
key << format("%6ld", tcon.sottoconto());
TConto* tc = (TConto*) objptr(key);
if (tc == NULL)
{
tc = new TConto(tcon.gruppo(), tcon.conto(), tcon.sottoconto(),
tcon.tipo());
add(key, tc);
tc->dare() = ZERO;
tc->avere() = ZERO;
tc->darepro() = ZERO;
tc->averepro() = ZERO;
tc->saldo() = ZERO;
}
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
}
void TTab_conti::aggiorna_conto(int gruppo, int conto, long sottoconto,
int anno_es, const real& importo, char sezione,
bool movap, bool provv, bool somma)
{
TString80 key;
key << format("%4d", anno_es);
key << format("%3d", gruppo);
key << format("%3d", conto);
key << format("%6ld", sottoconto);
TConto* tc = (TConto*) objptr(key);
if (tc == NULL)
{
tc = new TConto(gruppo, conto, sottoconto);
add(key, tc);
}
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
}
TSaldo_agg::TSaldo_agg()
{
_anno_es = 0;
_data_ulmov = "";
_num_ulmov = 0l;
_movap = FALSE;
_provv = FALSE;
reset(); // pulizia dell'array dei conti
}
void TSaldo_agg::aggiorna(const TConto& tc, const real& importo, char sezione,
bool somma)
{
_tab_conti.aggiorna_conto(tc, _anno_es, importo, sezione, _movap, _provv,
somma);
}
void TSaldo_agg::aggiorna(int gruppo, int conto, long sottoconto, const real& importo, char sezione, bool somma)
{
_tab_conti.aggiorna_conto(gruppo, conto, sottoconto, _anno_es, importo,
sezione, _movap, _provv, somma);
}
void TSaldo_agg::reset()
{
_tab_conti.destroy();
}
///////////////////////////////////////////////////////////////////////////////
// pulizia file saldi
//
// Scorro il file saldi per l' anno year o per tutti gli anni se year = 0
// e azzero i progressivi.
//
///////////////////////////////////////////////////////////////////////////////
void TSaldo_agg::clear_saldi(int year)
{
TLocalisamfile saldi(LF_SALDI);
set_anno_es(year);
saldi.zero();
if (anno_es() != 0)
saldi.put(SLD_ANNOES, anno_es());
TRectype last(saldi.curr());
for (saldi.read(_isgteq, _lock);
!saldi.eof() && saldi.curr() <= last;
saldi.next(_lock))
{
saldi.put(SLD_FLAGSALINI, "D");
saldi.zero(SLD_SALDO);
saldi.zero(SLD_PDAREPRO);
saldi.zero(SLD_PAVEREPRO);
saldi.zero(SLD_PDARE);
saldi.zero(SLD_PAVERE);
saldi.zero(SLD_NUMULTMOV);
saldi.zero(SLD_DATAULMOV);
saldi.rewrite();
}
saldi.reread(_unlock);
}
///////////////////////////////////////////////////////////////////////////////
// Aggiornamento file saldi
//
// Scorro la tabella dei conti interna _tab_conti.
// Per ogni conto cerco il record su saldi, se non c'e' lo creo.
// Se c'e' gia' lo aggiorno nel seguente modo:
//
///////////////////////////////////////////////////////////////////////////////
void TSaldo_agg::registra()
{
real s, r;
TString Flagsalini;
TDate data_ulmov;
long num_ulmov;
TLocalisamfile saldi(LF_SALDI);
int conti = _tab_conti.items();
_tab_conti.restart();
for (int i = 0; i < conti; i++)
{
THash_object * hobj = tconti();
const TConto& tcon = (TConto &)hobj->obj();
CHECK(tcon.ok(), "Tentativo di saldare un conto incompleto");
saldi.zero();
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)) );
saldi.put(SLD_GRUPPO, tcon.gruppo());
saldi.put(SLD_CONTO, tcon.conto());
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
bool update = TRUE;
if (saldi.read(_isequal, _lock) != NOERR)
{
saldi.zero();
saldi.put(SLD_ANNOES, anno_es());
saldi.put(SLD_GRUPPO, tcon.gruppo());
saldi.put(SLD_CONTO, tcon.conto());
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
s = tcon.saldo();
if (s < ZERO)
{ Flagsalini = "A"; s = -s; }
else
Flagsalini = "D";
saldi.put(SLD_FLAGSALINI, (const char *) Flagsalini);
saldi.put(SLD_SALDO, s);
saldi.put(SLD_PDAREPRO, tcon.darepro());
saldi.put(SLD_PAVEREPRO, tcon.averepro());
saldi.put(SLD_PDARE, tcon.dare());
saldi.put(SLD_PAVERE, tcon.avere());
if (_num_ulmov != 0L) saldi.put(SLD_NUMULTMOV, _num_ulmov);
if (_data_ulmov.ok()) saldi.put(SLD_DATAULMOV, _data_ulmov);
update = saldi.write() == _isreinsert;
if (update)
saldi.read(_isequal, _lock);
}
if (update)
{
num_ulmov = saldi.get_long(SLD_NUMULTMOV);
data_ulmov = saldi.get_date(SLD_DATAULMOV);
if (((_num_ulmov != 0L) && (_num_ulmov > num_ulmov)) ||
((_data_ulmov.ok()) && (_data_ulmov > data_ulmov)))
{
saldi.put(SLD_DATAULMOV, _data_ulmov);
saldi.put(SLD_NUMULTMOV, _num_ulmov);
}
r = tcon.saldo();
if (r != ZERO)
{
s = saldi.get_real(SLD_SALDO);
Flagsalini = saldi.get(SLD_FLAGSALINI);
if (Flagsalini == "A") s = r - s;
else s = r + s;
if (s < ZERO)
{
Flagsalini = "A"; s = -s;
}
else
Flagsalini = "D";
saldi.put(SLD_FLAGSALINI, Flagsalini);
saldi.put(SLD_SALDO, s);
}
r = saldi.get_real(SLD_PDAREPRO);
r += tcon.darepro();
saldi.put(SLD_PDAREPRO, r);
r = saldi.get_real(SLD_PAVEREPRO);
r += tcon.averepro();
saldi.put(SLD_PAVEREPRO, r);
r = saldi.get_real(SLD_PDARE);
r += tcon.dare();
saldi.put(SLD_PDARE, r);
r = saldi.get_real(SLD_PAVERE);
r += tcon.avere();
saldi.put(SLD_PAVERE, r);
saldi.rewrite();
}
}
}
/////////////////////////////////////////////////////////////////////////////
// cglib02.cpp
//
// Aggiornamento saldi
//
/////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <isam.h>
#include <utility.h>
#include <saldi.h>
#include "conto.h"
#include "cglib.h"
void TTab_conti::do_agg(TConto* tc, int anno_es, const real& importo,
char sezione, bool movap, bool provv, bool somma, const char* key)
{
real i = somma ? importo : -importo;
if (movap)
{
if (sezione == 'D') tc->saldo() += i;
else tc->saldo() -= i;
}
else
if (provv)
{
if (sezione == 'D') tc->darepro() += i;
else tc->averepro() += i;
}
else
{
if (sezione == 'D') tc->dare() += i;
else tc->avere() += i;
}
// rimuovo dalla tabella il conto se dare e avere vanno a zero
if (tc->dare().is_zero() && tc->avere().is_zero() &&
tc->darepro().is_zero() && tc->averepro().is_zero() &&
tc->saldo().is_zero()) remove(key);
}
void TTab_conti::aggiorna_conto(const TConto& tcon, int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma)
{
TString80 key;
key << format("%4d", anno_es);
key << format("%3d", tcon.gruppo());
key << format("%3d", tcon.conto());
key << format("%6ld", tcon.sottoconto());
TConto* tc = (TConto*) objptr(key);
if (tc == NULL)
{
tc = new TConto(tcon.gruppo(), tcon.conto(), tcon.sottoconto(),
tcon.tipo());
add(key, tc);
tc->dare() = ZERO;
tc->avere() = ZERO;
tc->darepro() = ZERO;
tc->averepro() = ZERO;
tc->saldo() = ZERO;
}
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
}
void TTab_conti::aggiorna_conto(int gruppo, int conto, long sottoconto,
int anno_es, const real& importo, char sezione,
bool movap, bool provv, bool somma)
{
TString80 key;
key << format("%4d", anno_es);
key << format("%3d", gruppo);
key << format("%3d", conto);
key << format("%6ld", sottoconto);
TConto* tc = (TConto*) objptr(key);
if (tc == NULL)
{
tc = new TConto(gruppo, conto, sottoconto);
add(key, tc);
}
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
}
TSaldo_agg::TSaldo_agg()
{
_anno_es = 0;
_data_ulmov = "";
_num_ulmov = 0l;
_movap = FALSE;
_provv = FALSE;
reset(); // pulizia dell'array dei conti
}
void TSaldo_agg::aggiorna(const TConto& tc, const real& importo, char sezione,
bool somma)
{
_tab_conti.aggiorna_conto(tc, _anno_es, importo, sezione, _movap, _provv,
somma);
}
void TSaldo_agg::aggiorna(int gruppo, int conto, long sottoconto, const real& importo, char sezione, bool somma)
{
_tab_conti.aggiorna_conto(gruppo, conto, sottoconto, _anno_es, importo,
sezione, _movap, _provv, somma);
}
void TSaldo_agg::reset()
{
_tab_conti.destroy();
}
///////////////////////////////////////////////////////////////////////////////
// pulizia file saldi
//
// Scorro il file saldi per l' anno year o per tutti gli anni se year = 0
// e azzero i progressivi.
//
///////////////////////////////////////////////////////////////////////////////
void TSaldo_agg::clear_saldi(int year)
{
TLocalisamfile saldi(LF_SALDI);
set_anno_es(year);
saldi.zero();
if (anno_es() != 0)
saldi.put(SLD_ANNOES, anno_es());
TRectype last(saldi.curr());
for (saldi.read(_isgteq, _lock);
!saldi.eof() && saldi.curr() <= last;
saldi.next(_lock))
{
saldi.put(SLD_FLAGSALINI, "D");
saldi.zero(SLD_SALDO);
saldi.zero(SLD_PDAREPRO);
saldi.zero(SLD_PAVEREPRO);
saldi.zero(SLD_PDARE);
saldi.zero(SLD_PAVERE);
saldi.zero(SLD_NUMULTMOV);
saldi.zero(SLD_DATAULMOV);
saldi.rewrite();
}
saldi.reread(_unlock);
}
///////////////////////////////////////////////////////////////////////////////
// Aggiornamento file saldi
//
// Scorro la tabella dei conti interna _tab_conti.
// Per ogni conto cerco il record su saldi, se non c'e' lo creo.
// Se c'e' gia' lo aggiorno nel seguente modo:
//
///////////////////////////////////////////////////////////////////////////////
void TSaldo_agg::registra()
{
real s, r;
TString Flagsalini;
TDate data_ulmov;
long num_ulmov;
TLocalisamfile saldi(LF_SALDI);
int conti = _tab_conti.items();
_tab_conti.restart();
for (int i = 0; i < conti; i++)
{
THash_object * hobj = tconti();
const TConto& tcon = (TConto &)hobj->obj();
CHECK(tcon.ok(), "Tentativo di saldare un conto incompleto");
saldi.zero();
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)) );
saldi.put(SLD_GRUPPO, tcon.gruppo());
saldi.put(SLD_CONTO, tcon.conto());
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
bool update = TRUE;
if (saldi.read(_isequal, _lock) != NOERR)
{
saldi.zero();
saldi.put(SLD_ANNOES, anno_es());
saldi.put(SLD_GRUPPO, tcon.gruppo());
saldi.put(SLD_CONTO, tcon.conto());
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
s = tcon.saldo();
if (s < ZERO)
{ Flagsalini = "A"; s = -s; }
else
Flagsalini = "D";
saldi.put(SLD_FLAGSALINI, (const char *) Flagsalini);
saldi.put(SLD_SALDO, s);
saldi.put(SLD_PDAREPRO, tcon.darepro());
saldi.put(SLD_PAVEREPRO, tcon.averepro());
saldi.put(SLD_PDARE, tcon.dare());
saldi.put(SLD_PAVERE, tcon.avere());
if (_num_ulmov != 0L) saldi.put(SLD_NUMULTMOV, _num_ulmov);
if (_data_ulmov.ok()) saldi.put(SLD_DATAULMOV, _data_ulmov);
update = saldi.write() == _isreinsert;
if (update)
saldi.read(_isequal, _lock);
}
if (update)
{
num_ulmov = saldi.get_long(SLD_NUMULTMOV);
data_ulmov = saldi.get_date(SLD_DATAULMOV);
if (((_num_ulmov != 0L) && (_num_ulmov > num_ulmov)) ||
((_data_ulmov.ok()) && (_data_ulmov > data_ulmov)))
{
saldi.put(SLD_DATAULMOV, _data_ulmov);
saldi.put(SLD_NUMULTMOV, _num_ulmov);
}
r = tcon.saldo();
if (r != ZERO)
{
s = saldi.get_real(SLD_SALDO);
Flagsalini = saldi.get(SLD_FLAGSALINI);
if (Flagsalini == "A") s = r - s;
else s = r + s;
if (s < ZERO)
{
Flagsalini = "A"; s = -s;
}
else
Flagsalini = "D";
saldi.put(SLD_FLAGSALINI, Flagsalini);
saldi.put(SLD_SALDO, s);
}
r = saldi.get_real(SLD_PDAREPRO);
r += tcon.darepro();
saldi.put(SLD_PDAREPRO, r);
r = saldi.get_real(SLD_PAVEREPRO);
r += tcon.averepro();
saldi.put(SLD_PAVEREPRO, r);
r = saldi.get_real(SLD_PDARE);
r += tcon.dare();
saldi.put(SLD_PDARE, r);
r = saldi.get_real(SLD_PAVERE);
r += tcon.avere();
saldi.put(SLD_PAVERE, r);
saldi.rewrite();
}
}
}

View File

@ -1,93 +1,93 @@
#ifndef __CONTO_H
#define __CONTO_H
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif
class TBill : public TSortable
{
char _tipo; // ' ' = Conto, 'C' = Cliente, 'F' = 'Fornitore'
int _gruppo, _conto;
long _sottoconto; // Sottoconto, codice cliente o fornitore
TString80 _descrizione; // Vuota fino alla chiamata di describe
int _tipo_cr; // Tipo costo/ricavo
bool _sospeso;
protected:
virtual int compare(const TSortable& s) const;
virtual const char* class_name() const { return "Conto"; }
void describe();
const TBill& copy(const TBill& b);
public:
TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1)
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d), _tipo_cr(r) { set(g,c,s,t,d,r);}
TBill(TToken_string& tgcsd, int from, int mode = 0);
TBill(const TBill& b) { copy(b); }
virtual ~TBill() {}
const TBill& set(int g = 0, int c = 0, long s = 0L, char t = ' ',
const char* d = NULL, int r = -1);
const TBill& add_to(TToken_string& ts, int from, int mode = 0);
const TBill& operator=(const TBill& b) { return copy(b); }
virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
bool empty() const { return _gruppo==0 && _conto==0 && _sottoconto == 0; }
char tipo() const { return _tipo; }
int gruppo() const { return _gruppo; }
int conto() const { return _conto; }
long sottoconto() const { return _sottoconto; }
const TString& descrizione();
int tipo_cr();
void tipo_cr(int tcr) { _tipo_cr = tcr; }
int tipo_att();
bool read(TRectype& r);
bool sospeso() const { return _sospeso;} // _sospeso e' letto nella read()
const char* string(int mode = 0);
};
enum TIndbil { ib_null, ib_attivita, ib_passivita, ib_costi, ib_ricavi, ib_conti_ordine };
class TConto : public TBill
{
real _dare, _avere, _darepro, _averepro, _saldo;
public:
TConto(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL)
: TBill(g, c, s, t, d) {}
TConto (TToken_string& tgcsd, int from, int mode = 0)
: TBill(tgcsd, from, mode) {};
real& dare() { return _dare; }
const real& dare() const { return _dare; }
real& avere() { return _avere; }
const real& avere() const { return _avere; }
real& darepro() { return _darepro; }
const real& darepro() const { return _darepro; }
real& averepro() { return _averepro; }
const real& averepro() const { return _averepro; }
real& saldo() { return _saldo; }
const real& saldo() const { return _saldo; }
};
#endif
#ifndef __CONTO_H
#define __CONTO_H
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif
class TBill : public TSortable
{
char _tipo; // ' ' = Conto, 'C' = Cliente, 'F' = 'Fornitore'
int _gruppo, _conto;
long _sottoconto; // Sottoconto, codice cliente o fornitore
TString80 _descrizione; // Vuota fino alla chiamata di describe
int _tipo_cr; // Tipo costo/ricavo
bool _sospeso;
protected:
virtual int compare(const TSortable& s) const;
virtual const char* class_name() const { return "Conto"; }
void describe();
const TBill& copy(const TBill& b);
public:
TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1)
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d), _tipo_cr(r) { set(g,c,s,t,d,r);}
TBill(TToken_string& tgcsd, int from, int mode = 0);
TBill(const TBill& b) { copy(b); }
virtual ~TBill() {}
const TBill& set(int g = 0, int c = 0, long s = 0L, char t = ' ',
const char* d = NULL, int r = -1);
const TBill& add_to(TToken_string& ts, int from, int mode = 0);
const TBill& operator=(const TBill& b) { return copy(b); }
virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
bool empty() const { return _gruppo==0 && _conto==0 && _sottoconto == 0; }
char tipo() const { return _tipo; }
int gruppo() const { return _gruppo; }
int conto() const { return _conto; }
long sottoconto() const { return _sottoconto; }
const TString& descrizione();
int tipo_cr();
void tipo_cr(int tcr) { _tipo_cr = tcr; }
int tipo_att();
bool read(TRectype& r);
bool sospeso() const { return _sospeso;} // _sospeso e' letto nella read()
const char* string(int mode = 0);
};
enum TIndbil { ib_null, ib_attivita, ib_passivita, ib_costi, ib_ricavi, ib_conti_ordine };
class TConto : public TBill
{
real _dare, _avere, _darepro, _averepro, _saldo;
public:
TConto(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL)
: TBill(g, c, s, t, d) {}
TConto (TToken_string& tgcsd, int from, int mode = 0)
: TBill(tgcsd, from, mode) {};
real& dare() { return _dare; }
const real& dare() const { return _dare; }
real& avere() { return _avere; }
const real& avere() const { return _avere; }
real& darepro() { return _darepro; }
const real& darepro() const { return _darepro; }
real& averepro() { return _averepro; }
const real& averepro() const { return _averepro; }
real& saldo() { return _saldo; }
const real& saldo() const { return _saldo; }
};
#endif