cg2102.cpp Resa piu' robusta la gestione degli sheet in visione dei

cambiamenti sul messaggio K_INS
cg3100.cpp    Aggiustamenti infimi
cg3600.cpp    COrretta marea di errori e ottimizzata espansione delle righe
cg3600a.uml   Aggiunti groupbox
cg3600b.uml   Ristretta colonna della causale
cglib01.cpp   COrretta gestione progind


git-svn-id: svn://10.65.10.50/trunk@4010 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-12-17 15:10:50 +00:00
parent dae74eae6e
commit fd53008af7
6 changed files with 332 additions and 224 deletions

View File

@ -840,6 +840,9 @@ bool TPrimanota_application::cg_notify(TSheet_field& cg, int r, KEY k)
return TRUE; // Ritorna subito, altrimenti crea riga vuota
}
if (k == K_INS) // La riga non esiste ancora
return TRUE;
TToken_string& row = cg.row(r);
const char tipo = row_type(row); // Tipo della riga in esame
@ -1216,7 +1219,10 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
TPrimanota_application& a = app();
if (a._as400)
return TRUE;
if (k = K_INS || k == K_CTRL+K_DEL)
return TRUE;
TToken_string& row = iva.row(r);
const TCausale& cau = a.causale();

View File

@ -22,7 +22,6 @@
#include <saldi.h>
#include "cglib.h"
//#include "cglib04.h"
#include "cglib03.h"
#include "cg2103.h"

View File

@ -56,7 +56,6 @@ protected:
protected:
TList_object* detach_lstobj(long index);
TList_object* lstobjptr(long index) const;
void change_step(long step);
public:
long items() const { return _items; }
@ -76,7 +75,8 @@ public:
TObject* detach(long pos);
bool remove(long pos);
void choose_step(long expected_size); // Sceglie il passo per gli elemnti
void change_step(long step); // Forza il passo per gli elementi
long choose_step(long expected_size); // Sceglie il passo per gli elemnti
TList(long expected_size = 128L);
virtual ~TList();
@ -175,10 +175,11 @@ void TList::change_step(long step)
}
}
void TList::choose_step(long expected_size)
long TList::choose_step(long expected_size)
{
long step = expected_size / MAX_SKIP + 1;
const long step = expected_size / MAX_SKIP + 1;
change_step(step);
return step;
}
long TList::insert(TObject* obj, long index)
@ -318,8 +319,8 @@ protected:
TImporto& si, TImporto& da, TImporto& av, TImporto& sf) const;
public:
void read(int g, int c, long s, int esercizio);
void read(const TBill& b, int esercizio);
void read(int g, int c, long s, int esercizio, bool ignora_movap = FALSE);
void read(const TBill& b, int esercizio, bool ignora_movap = FALSE);
void reread();
const TImporto& saldo_iniziale() const;
@ -331,8 +332,8 @@ public:
TImporto saldo_finale_chiusura() const;
TBalance();
TBalance(int g, int c, long s, int esercizio);
TBalance(const TBill& b, int esercizio);
TBalance(int g, int c, long s, int esercizio, bool ignora_movap = FALSE);
TBalance(const TBill& b, int esercizio, bool ignora_movap = FALSE);
virtual ~TBalance() { }
};
@ -340,14 +341,14 @@ TBalance::TBalance()
{
}
TBalance::TBalance(int g, int c, long s, int esercizio)
TBalance::TBalance(int g, int c, long s, int esercizio, bool ignora_movap)
{
read(g, c, s, esercizio);
read(g, c, s, esercizio, ignora_movap);
}
TBalance::TBalance(const TBill& b, int esercizio)
TBalance::TBalance(const TBill& b, int esercizio, bool ignora_movap)
{
read(b, esercizio);
read(b, esercizio, ignora_movap);
}
bool TBalance::find(const TBill& b, int esercizio,
@ -379,13 +380,13 @@ bool TBalance::find(const TBill& b, int esercizio,
}
void TBalance::read(int gruppo, int conto, long sottoconto, int esercizio)
void TBalance::read(int gruppo, int conto, long sottoconto, int esercizio, bool ignora_movap)
{
const TBill zio(gruppo, conto, sottoconto);
read(zio, esercizio);
read(zio, esercizio, ignora_movap);
}
void TBalance::read(const TBill& b, int esercizio)
void TBalance::read(const TBill& b, int esercizio, bool ignora_movap)
{
TImporto si, sf, pd, pa;
@ -416,6 +417,11 @@ void TBalance::read(const TBill& b, int esercizio)
}
}
}
else
{
if (ignora_movap)
_saldo_ini.set('D', ZERO);
}
}
const TImporto& TBalance::saldo_iniziale() const
@ -553,7 +559,6 @@ public:
long last(tipo_riga_mastrino tipo = riga_mastrino) const;
void destroy() { _riga.destroy(); }
int esercizio() const { return _esercizio; }
const real& progressivo_dare_iniziale() const { return _pdare_ini; }
const real& progressivo_avere_iniziale() const { return _pavere_ini; }
@ -567,6 +572,11 @@ public:
real progressivo_avere_periodo() const { return _pavere_ini + _pavere_per; }
TImporto saldo_periodo() const;
int esercizio() const { return _esercizio; }
const TDate& inizio_periodo() const { return _da_data; }
const TDate& fine_periodo() const { return _a_data; }
void periodo(TDate& dd, TDate& ad) const { dd = _da_data; ad = _a_data; }
bool expandable(long rec) const;
bool expand(long rec);
bool collapse(long rec);
@ -671,10 +681,8 @@ void TMastrino::read(const TBill& conto,
_da_caus = dc;
_a_caus = ac.blank() ? "zzz" : ac; // Se vuota sceglie la massima causale
const TDate& min_data_reg = _da_data;
TDate max_data_reg;
long num_giorni = _a_data - _da_data + 1;
TDate max_data_reg = _a_data;
long num_giorni = _a_data - inizio_esercizio + 1;
if (_esercizio > 0)
{
const int succ = esercizi.next(ae);
@ -686,8 +694,6 @@ void TMastrino::read(const TBill& conto,
else
max_data_reg = esercizi[ae].fine();
}
else
max_data_reg = _a_data;
TString caption(80);
caption.format("Caricamento mastrino %03d.%03d.%06ld",
@ -695,7 +701,9 @@ void TMastrino::read(const TBill& conto,
TProgind pi(num_giorni, caption, FALSE, TRUE, 48);
// Stima dimensione mastrino
_riga.choose_step(num_giorni);
const long step = _riga.choose_step(num_giorni);
if (step < 8)
_riga.change_step(8);
// Valori dei saldi fino alla data di inizio stampa:
// Vengono inizializzati con i saldi iniziali dell'esercizio,
@ -703,7 +711,7 @@ void TMastrino::read(const TBill& conto,
// vanno dall'inizio dell'esercizio al giorno precedente
// la data di inizio stampa
const TBalance saldo(_conto, ae);
const TBalance saldo(_conto, ae, TRUE);
_pdare_ini = saldo.progressivo_dare_iniziale();
_pavere_ini = saldo.progressivo_avere_iniziale();
_pdare_fin = saldo.progressivo_dare_finale();
@ -716,7 +724,7 @@ void TMastrino::read(const TBill& conto,
_pdare_per = _pavere_per = ZERO;
conto.put(rmov_rec);
rmov_rec.put(RMV_DATAREG, min_data_reg);
rmov_rec.put(RMV_DATAREG, inizio_esercizio);
const TRecfield rmov_datareg (rmov_rec, RMV_DATAREG);
const TRecfield rmov_numreg (rmov_rec, RMV_NUMREG);
@ -754,11 +762,11 @@ void TMastrino::read(const TBill& conto,
num_rec++;
if ((num_rec & 0x7F) == 0)
{
const long sec = (clock() - clock_start) / CLOCKS_PER_SEC;
if (sec > 0)
const double sec = (clock() - clock_start) / CLOCKS_PER_SEC;
if (sec > 0.0)
{
TString80 msg;
msg.format("%ld records at %ld rec/sec", num_rec, num_rec / sec);
msg.format("%ld records at %ld rec/sec", num_rec, long(num_rec/sec));
pi.set_text(msg);
}
}
@ -772,21 +780,24 @@ void TMastrino::read(const TBill& conto,
const TDate data_corrente = _esercizio <= 0 ? data_reg : (TDate)mov_datacomp;
if (data_corrente > _a_data)
continue;
// Aggiorna la barra solo una volta al giorno
if (data_reg > ultimo_giorno)
{
const long giorno = data_reg - inizio_esercizio + 1;
pi.setstatus(giorno);
ultimo_giorno = data_reg;
}
const char sezione = *((const char*)rmov_sezione);
const real importo((const char*)rmov_importo);
if (data_corrente < _da_data)
{
if (data_corrente >= inizio_esercizio)
{
if (sezione == 'D')
_pdare_ini += importo;
else
_pavere_ini += importo;
}
else
continue;
if (sezione == 'D')
_pdare_ini += importo;
else
_pavere_ini += importo;
}
else
{
@ -807,13 +818,6 @@ void TMastrino::read(const TBill& conto,
rmov().recno(), mov().recno(),
_pdare_per, _pavere_per, data_reg);
_riga.append(r);
if (data_reg > ultimo_giorno)
{
const long giorno = data_reg - min_data_reg + 1;
pi.setstatus(giorno);
ultimo_giorno = data_reg;
}
}
}
@ -878,52 +882,67 @@ bool TMastrino::expandable(long rec) const
return e;
}
// Genera le righe di contropartita di una riga del mastrino
bool TMastrino::expand(long rec)
{
bool ok = expandable(rec);
if (ok)
{
const TRectype& head = testata(rec);
const long numreg = head.get_long(MOV_NUMREG);
const TRectype& head = testata(rec); // Testata movimento
const long numreg = head.get_long(RMV_NUMREG); // Numero di registrazione
const int numrig = riga(rec).get_int(RMV_NUMRIG); // Numero riga contabile
const TDate datareg = head.get(MOV_DATAREG); // Data di registrazione
rmov().setkey(1);
TRectype& curr = rmov().curr();
curr.zero();
curr.put(RMV_NUMREG, numreg);
for (int err = rmov().read(_isgteq); err == NOERR; err = rmov().next())
rmov().setkey(1); // Usa chiave NUMREG+NUMRIG
TRectype& curr = rmov().curr(); // Record corrente
const TRecfield rnumreg (curr, RMV_NUMREG); // Numero di registrazione corrente
const TRecfield rnumrig (curr, RMV_NUMRIG); // Numero di riga corrente
const TRecfield rsezione(curr, RMV_SEZIONE); // Sezione Dare/Avere
const TRecfield rimporto(curr, RMV_IMPORTO); // Importo della riga
int err = NOERR;
if (numrig != 1) // Se non e' gia' posizionato grazie a riga(rec)
{
if (curr.get_long(RMV_NUMREG) != numreg)
curr.zero(); // Azzera record corrente
curr.put(RMV_NUMREG, numreg); // Inizializza la chiave parziale
err = rmov().read(_isgteq); // Cerca la prima riga del movimento
}
for (; err == NOERR; err = rmov().next()) // Scandisce righe movimento
{
if (numreg != (long)rnumreg) // Controlla validita' numero
break;
const TBill bill(curr, TRUE); // Legge il conto di contropartita
if (bill == _conto)
if (numrig != (int)rnumrig) // Ignora la riga gia' presente
{
real dare, avere;
if (curr.get_char(RMV_SEZIONE) == 'D')
dare = curr.get_real(RMV_IMPORTO);
real dare, avere; // Costruisce importo della riga
if (*(const char*)rsezione == 'D')
dare = rimporto;
else
avere = curr.get_real(RMV_IMPORTO);
const TDate data(head.get(MOV_DATAREG));
avere = rimporto;
// Aggiunge una riga di contropartita al mastrino
TRiga_mastrino* r = new TRiga_mastrino(riga_contropartita,
rmov().recno(), mov().recno(),
dare, avere, data);
_riga.append(r, rec);
dare, avere, datareg);
_riga.append(r, rec++);
}
}
}
return ok;
}
// Elimina le righe di contropartita di una riga del mastrino
bool TMastrino::collapse(long rec)
{
if (row(rec).tipo() != riga_mastrino)
rec = pred(rec, riga_mastrino);
bool ok = !expandable(rec);
if (ok)
{
bool ok = TRUE; // Posso eliminare?
if (row(rec).tipo() != riga_mastrino) // Se non sono su una riga mastrino ...
rec = pred(rec, riga_mastrino); // ... mi sposto sulla precedente
else
ok = !expandable(rec); // Controlla che sia possibile
if (ok) // Posso effetivamente procedere
{
rec++;
rec++; // Elimino ogni riga contropartita successiva
while (rec < items() && row(rec).tipo() != riga_mastrino)
_riga.remove(rec);
}
@ -936,13 +955,14 @@ bool TMastrino::collapse(long rec)
class TGrid_control;
class TGrid_cell : public TObject
class TGrid_cell : public TFixed_string
{
XI_EVENT* _xiev;
public:
void set(const char* txt);
void set(long num);
TString& set(const char* txt);
TString& set(long num);
void set_icon(int id);
void show_button(bool on = TRUE);
void hide_button() { show_button(FALSE); }
@ -951,10 +971,11 @@ public:
void set_colors(COLOR back, COLOR fore);
short get_column() const { return _xiev->v.cell_request.col_nbr; }
short get_size() const { return _xiev->v.cell_request.len; }
char* get_buffer() { return _xiev->v.cell_request.s; }
TString& operator = (const char* str) { return set(str); }
TString& operator = (const TString& str) { return set(str); }
TGrid_cell(XI_EVENT* xiev) : _xiev(xiev) { }
TGrid_cell(XI_EVENT* xiev);
virtual ~TGrid_cell() { }
};
@ -1178,7 +1199,7 @@ TGrid_control::TGrid_control(
l->movable_columns = TRUE;
l->fixed_columns = fixed_columns;
l->max_lines_in_cell = lines_in_cell;
l->scroll_bar = TRUE;
l->scroll_bar = TRUE;
l->scroll_bar_button = TRUE;
l->white_space_color = MASK_DARK_COLOR;
l->rule_color = MASK_DARK_COLOR;
@ -1533,8 +1554,13 @@ bool TGrid_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
}
else
{
if (cell.get_size() > 2)
if (cell.size() > 2)
{
cell.set(rec+1);
// Setto il colore del testo altrimenti verrebbe grigio:
// non uso la set_color perche' ignora NORMAL_COLOR
xiev->v.cell_request.color = NORMAL_COLOR;
}
}
}
else
@ -1745,33 +1771,31 @@ void TGrid_control::save_columns_order() const
// TGrid_cell
///////////////////////////////////////////////////////////
TGrid_cell::TGrid_cell(XI_EVENT* xiev)
: TFixed_string(xiev->v.cell_request.s, xiev->v.cell_request.len),
_xiev(xiev)
{ }
// Setta il testo di una cella (Mai piu' testo troppo lungo!)
// Se c'e' gia' un'icona la elimina
void TGrid_cell::set(const char* txt)
{
char* str = _xiev->v.cell_request.s;
if (txt)
{
const short& max = _xiev->v.cell_request.len;
strncpy(str, txt, max);
str[max-1] = '\0';
}
else
str[0] = '\0';
if (str[0])
TString& TGrid_cell::set(const char* txt)
{
strncpy(txt, size());
if (not_empty())
{
int& icon = _xiev->v.cell_request.icon_rid;
if (icon)
icon = 0;
}
return *this;
}
void TGrid_cell::set(long num)
TString& TGrid_cell::set(long num)
{
char buff[16];
sprintf(buff, "%ld", num);
set(buff);
return set(buff);
}
// Setta l'icona di una cella
@ -2128,6 +2152,8 @@ HIDDEN void set_imp(TMask_field& f, const TImporto& imp)
str << ' ' << imp.sezione();
f.set(str);
}
else
f.reset();
}
void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
@ -2140,9 +2166,8 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
if (riga.tipo() == riga_mastrino)
{
const TRectype& mov = _mastrino.testata(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text = riga.data().string();
text << ' ' << mov.get(MOV_DATACOMP);
cell = riga.data().string();
cell << ' ' << mov.get(MOV_DATADOC);
}
break;
case 102:
@ -2151,7 +2176,7 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
const TRectype& mov = _mastrino.testata(rec);
const int anno = _esercizi.date2esc(riga.data());
const int eser = mov.get_int(MOV_ANNOES);
const comp = anno == eser;
const comp = anno != eser;
cell.set_icon(comp ? ICO_CHECK_ON : ICO_CHECK_OFF);
}
break;
@ -2164,8 +2189,7 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
else
{
const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text.format("%03d.%03d.%06ld",
cell.format("%03d.%03d.%06ld",
rmov.get_int(RMV_GRUPPO),
rmov.get_int(RMV_CONTO),
rmov.get_long(RMV_SOTTOCONTO));
@ -2175,24 +2199,21 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
if (riga.tipo() == riga_mastrino)
{
const TRectype& mov = _mastrino.testata(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text = mov.get(MOV_DESCR);
if (text.empty())
cell.set(mov.get(MOV_DESCR));
if (cell.empty())
{
const TRectype& rmov = _mastrino.riga(rec);
text = rmov.get(RMV_DESCR);
cell.set(rmov.get(RMV_DESCR));
}
}
else
{
const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text = rmov.get(RMV_DESCR);
if (text.empty())
cell.set(rmov.get(RMV_DESCR));
if (cell.empty())
{
const TBill conto(rmov);
text = conto.descrizione();
cell.set(conto.descrizione());
}
}
break;
@ -2200,31 +2221,29 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
{
const TRectype& rmov = _mastrino.riga(rec);
if (rmov.get_char(RMV_SEZIONE) == 'D')
cell.set(rmov.get_real(RMV_IMPORTO).string("."));
cell = rmov.get_real(RMV_IMPORTO).string(".");
}
break;
case 106:
{
const TRectype& rmov = _mastrino.riga(rec);
if (rmov.get_char(RMV_SEZIONE) == 'A')
cell.set(rmov.get_real(RMV_IMPORTO).string("."));
cell = rmov.get_real(RMV_IMPORTO).string(".");
}
break;
case 107:
if (riga.tipo() == riga_mastrino)
{
const TRectype& mov = _mastrino.testata(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text = mov.get(MOV_NUMDOC); text.left_just(7);
text << ' ' << mov.get(MOV_PROTIVA);
cell = mov.get(MOV_NUMDOC); cell.left_just(7);
cell << ' ' << mov.get(MOV_PROTIVA);
}
break;
case 108:
{
const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size());
text = rmov.get_real(RMV_IMPORTO).string(".");
text << ' ' << rmov.get(RMV_SEZIONE);
cell = rmov.get_real(RMV_IMPORTO).string(".");
cell << ' ' << rmov.get(RMV_SEZIONE);
}
break;
case 109:
@ -2242,9 +2261,8 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
TImporto imp = riga.saldo();
imp += _mastrino.saldo_iniziale();
imp.normalize();
TFixed_string text(cell.get_buffer(), cell.get_size());
text = imp.valore().string(".");
text << ' ' << imp.sezione();
cell = imp.valore().string(".");
cell << ' ' << imp.sezione();
}
}
break;
@ -2297,15 +2315,35 @@ void TMastrini_grid::on_grid_button()
const long last_con = _mastrino.last(riga_contropartita);
// Se non esistono contropartite devo espandere le righe
const bool expand = last_con < 0;
#ifdef DBG
const clock_t clock_start = clock();
#endif
if (expand)
{
for (long n = _mastrino.last(riga_mastrino);
n >= 0; n = _mastrino.pred(n, riga_mastrino))
{
long step = 0;
for (long n = _mastrino.first(riga_mastrino);
n < _mastrino.items(); n = _mastrino.succ(n, riga_mastrino))
{
if (_mastrino.expandable(n))
_mastrino.expand(n);
if (pi)
pi->setstatus(total - n);
{
pi->setstatus(++step);
#ifdef DBG
if ((step & 0x7F) == 0)
{
const double sec = (clock() - clock_start) / CLOCKS_PER_SEC;
if (sec > 0.0)
{
TString80 msg;
msg.format("%ld records at %ld rec/sec", step, long(step/sec));
pi->set_text(msg);
}
}
#endif
}
}
}
else
@ -2380,7 +2418,11 @@ void TMastrini_grid::reread()
void TMastrini_grid::update_mask() const
{
TMask& gm = mask();
TMask& gm = mask();
gm.set(F_ESERCIZIO, _mastrino.esercizio());
gm.set(F_DADATA, _mastrino.inizio_periodo());
gm.set(F_ADATA, _mastrino.fine_periodo());
set_imp(gm.field(F_TOTPRO_SAL), _mastrino.saldo_iniziale());
gm.set(F_TOTPRO_DAR, _mastrino.progressivo_dare_iniziale());
@ -2602,7 +2644,8 @@ void TGrid_mask::handler(WINDOW win, EVENT* ep)
class TQuery_mask : public TMask
{
protected:
protected:
static bool esercizio_handler(TMask_field& f, KEY k);
static bool data_handler(TMask_field& f, KEY k);
static bool find_handler(TMask_field& f, KEY k);
@ -2615,16 +2658,42 @@ public:
TQuery_mask::TQuery_mask()
: TMask("cg3600a")
{
{
set_handler(F_ESERCIZIO, esercizio_handler);
set_handler(F_DADATA, data_handler);
set_handler(F_ADATA, data_handler);
set_handler(F_ADATA, data_handler);
set_handler(DLG_FINDREC, find_handler);
}
bool TQuery_mask::esercizio_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
{
TEsercizi_contabili esc;
const int anno = atoi(f.get());
if (esc.exist(anno))
{
TMask& m = f.mask();
TDate dd = m.get(F_DADATA);
if (esc.date2esc(dd) != anno)
m.set(F_DADATA, esc[anno].inizio());
dd = m.get(F_ADATA);
if (esc.date2esc(dd) != anno)
m.set(F_ADATA, esc[anno].fine());
}
else
{
if (anno > 0)
return error_box("Esercizio inesistente: %d", anno);
}
}
return TRUE;
}
bool TQuery_mask::data_handler(TMask_field& f, KEY k)
{
bool ok = TRUE;
if (f.to_check(k))
if (k == K_ENTER)
{
const TQuery_mask& qm = (const TQuery_mask&)f.mask();
const TEsercizi_contabili esercizi;
@ -2684,23 +2753,17 @@ void TQuery_mask::do_query(TGrid_mask& gm)
const int g = get_int(F_GRUPPO);
const int c = get_int(F_CONTO);
const long s = get_long((t <= ' ') ? F_SOTTOCONTO : ((t == 'C') ? F_CLIENTE : F_FORNITORE));
const TBill conto(g, c, s, t);
const int annoes = get_int(F_ESERCIZIO);
TDate da_data(get(F_DADATA));
TDate a_data(get(F_ADATA));
TString da_caus(get(F_DACAUSALE));
TString a_caus(get(F_ACAUSALE));
const int annoes = get_int(F_ESERCIZIO);
const TDate da_data(get(F_DADATA));
const TDate a_data(get(F_ADATA));
const TString& da_caus = get(F_DACAUSALE);
const TString& a_caus = get(F_ACAUSALE);
conto.set(gm, F_GRUPPO, F_CONTO, F_SOTTOCONTO, 0, F_DESSOTTOC);
gm.set(F_ESERCIZIO, annoes);
gm.set(F_DADATA, da_data);
gm.set(F_ADATA, a_data);
gm.grid().read(conto, annoes, da_data, a_data, da_caus, a_caus);
gm.run();
@ -2790,8 +2853,7 @@ bool TMastrini_video::menu(MENU_TAG mt)
qm.reset(F_SOTTOCONTO); // Azzera sottoconto
qm.reset(F_CLIENTE); // Azzera cliente
qm.reset(F_FORNITORE); // Azzera fornitore
qm.reset(F_DACAUSALE); // Azzera causali
qm.reset(F_ACAUSALE);
qm.reset(-5); // Azzera causali
key = qm.run();
switch (key)

View File

@ -20,11 +20,16 @@ END
ENDPAGE
PAGE "Mastrini" -1 -1 76 20
PAGE "Mastrini" -1 -1 78 20
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 1 1 "@bDitta corrente"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 1 1 "Ditta "
PROMPT 2 2 "Codice "
FLAGS "DF"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
@ -34,13 +39,19 @@ END
STRING F_RAGSOC 50
BEGIN
PROMPT 22 1 ""
PROMPT 23 2 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 76 6
BEGIN
PROMPT 1 4 "@bConto del mastrino"
FLAGS "R"
END
LIST F_TIPO 10
BEGIN
PROMPT 1 3 "Tipo "
PROMPT 2 5 "Tipo "
ITEM " |Conto" MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
ITEM "C|Cliente" MESSAGE HIDE,1@|SHOW,2@|HIDE,3@
ITEM "F|Fornitore" MESSAGE HIDE,1@|HIDE,2@|SHOW,3@
@ -48,7 +59,7 @@ END
NUMBER F_GRUPPO 3
BEGIN
PROMPT 1 4 "Gruppo "
PROMPT 2 6 "Gruppo "
USE LF_PCON SELECT (CONTO="")
INPUT GRUPPO F_GRUPPO
DISPLAY "Gruppo" GRUPPO
@ -56,23 +67,13 @@ BEGIN
OUTPUT F_GRUPPO GRUPPO
OUTPUT F_DESGRUPPO DESCR
CHECKTYPE REQUIRED
END
STRING F_DESGRUPPO 50
BEGIN
PROMPT 22 4 ""
USE LF_PCON KEY 2 SELECT (CONTO="")
INPUT DESCR F_DESGRUPPO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
COPY OUTPUT F_GRUPPO
CHECKTYPE REQUIRED
WARNING "Gruppo assente"
END
NUMBER F_CONTO 3
BEGIN
PROMPT 1 5 "Conto "
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
PROMPT 2 7 "Conto "
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")&&(TMCF==#F_TIPO)
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
DISPLAY "Gruppo" GRUPPO
@ -84,23 +85,12 @@ BEGIN
OUTPUT F_CONTO CONTO
OUTPUT F_DESCONTO DESCR
CHECKTYPE REQUIRED
END
STRING F_DESCONTO 50
BEGIN
PROMPT 22 5 ""
USE LF_PCON KEY 2 SELECT (CONTO!="")&&(SOTTOCONTO="")
INPUT DESCR F_DESCONTO
COPY DISPLAY F_GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Tipo" TMCF
COPY OUTPUT F_CONTO
CHECKTYPE REQUIRED
WARNING "Conto assente"
END
NUMBER F_SOTTOCONTO 6
BEGIN
PROMPT 1 6 "Sottoconto "
PROMPT 2 8 "Sottoconto "
USE LF_PCON SELECT (SOTTOCONTO!="")
COPY INPUT F_CONTO
INPUT SOTTOCONTO F_SOTTOCONTO
@ -113,24 +103,13 @@ BEGIN
OUTPUT F_SOTTOCONTO SOTTOCONTO
OUTPUT F_DESSOTTOC DESCR
CHECKTYPE REQUIRED
GROUP 1 4
END
STRING F_DESSOTTOC 50
BEGIN
PROMPT 22 6 ""
USE LF_PCON KEY 2 SELECT (SOTTOCONTO!="")
INPUT DESCR F_DESSOTTOC
COPY DISPLAY F_DESCONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SOTTOCONTO
CHECKTYPE REQUIRED
WARNING "Sottoconto assente"
GROUP 1 4
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 1 6 "Cliente "
PROMPT 2 8 "Cliente "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
@ -139,25 +118,13 @@ BEGIN
OUTPUT F_CLIENTE CODCF
OUTPUT F_RAGSOCCLI RAGSOC
CHECKTYPE REQUIRED
GROUP 2 4
END
STRING F_RAGSOCCLI 50
BEGIN
PROMPT 22 6 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
COPY OUTPUT F_CLIENTE
CHECKTYPE REQUIRED
WARNING "Cliente assente"
GROUP 2 4
END
STRING F_FORNITORE 6
BEGIN
PROMPT 1 6 "Fornitore "
PROMPT 2 8 "Fornitore "
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
@ -165,49 +132,116 @@ BEGIN
OUTPUT F_FORNITORE CODCF
OUTPUT F_RAGSOCFOR RAGSOC
CHECKTYPE REQUIRED
WARNING "Fornitore assente"
GROUP 3 4
END
STRING F_DESGRUPPO 50
BEGIN
PROMPT 23 6 ""
USE LF_PCON KEY 2 SELECT (CONTO="")
INPUT DESCR F_DESGRUPPO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
COPY OUTPUT F_GRUPPO
CHECKTYPE REQUIRED
WARNING "Gruppo assente"
END
STRING F_DESCONTO 50
BEGIN
PROMPT 23 7 ""
USE LF_PCON KEY 2 SELECT (CONTO!="")&&(SOTTOCONTO="")&&(TMCF==#F_TIPO)
INPUT DESCR F_DESCONTO
COPY DISPLAY F_DESGRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Tipo" TMCF
COPY OUTPUT F_CONTO
CHECKTYPE REQUIRED
WARNING "Conto assente"
END
STRING F_DESSOTTOC 50
BEGIN
PROMPT 23 8 ""
USE LF_PCON KEY 2 SELECT (SOTTOCONTO!="")
INPUT DESCR F_DESSOTTOC
COPY DISPLAY F_DESCONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SOTTOCONTO
CHECKTYPE REQUIRED
WARNING "Sottoconto assente"
GROUP 1 4
END
STRING F_RAGSOCCLI 50
BEGIN
PROMPT 23 8 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
COPY OUTPUT F_CLIENTE
CHECKTYPE REQUIRED
WARNING "Cliente assente"
GROUP 2 4
END
STRING F_RAGSOCFOR 50
BEGIN
PROMPT 22 6 ""
PROMPT 23 8 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_RAGSOCFOR
COPY DISPLAY F_RAGSOCCLI
COPY OUTPUT F_FORNITORE
CHECKTYPE REQUIRED
WARNING "Fornitore assente"
GROUP 3 4
END
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 1 10 "@bPeriodo"
FLAGS "R"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 8 "Esercizio "
PROMPT 2 11 "Esercizio "
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
CHECKTYPE NORMAL
ADD NONE
END
DATE F_DADATA
BEGIN
PROMPT 22 8 "Dalla data "
PROMPT 23 11 "Dalla data "
END
DATE F_ADATA
BEGIN
PROMPT 51 8 "Alla data "
PROMPT 52 11 "Alla data "
VALIDATE DATE_CMP_FUNC >= F_DADATA
WARNING "La data finale deve essere maggiore di quella iniziale"
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 13 "@bCausali"
FLAGS "R"
END
STRING F_DACAUSALE 3
BEGIN
PROMPT 1 10 "Da causale "
FLAGS "U"
PROMPT 2 14 "Da causale "
FLAGS "UZ"
USE LF_CAUSALI
INPUT CODCAUS F_DACAUSALE
DISPLAY "Codice" CODCAUS
@ -217,41 +251,45 @@ BEGIN
STR_EXPR (#F_ACAUSALE="")||(#F_DACAUSALE<=#F_ACAUSALE)
WARNING "La causale iniziale deve precedere quella finale"
CHECKTYPE SEARCH
GROUP 5
END
STRING F_DADESCAUS 50
BEGIN
PROMPT 22 10 ""
PROMPT 23 14 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DADESCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_DACAUSALE
CHECKTYPE SEARCH
GROUP 5
END
STRING F_ACAUSALE 3
BEGIN
PROMPT 1 11 "A causale "
FLAGS "U"
PROMPT 2 15 "A causale "
FLAGS "UZ"
COPY USE F_DACAUSALE
INPUT CODCAUS F_ACAUSALE
COPY DISPLAY F_DACAUSALE
OUTPUT F_ACAUSALE CODCAUS
OUTPUT F_ADESCAUS DESCR
STR_EXPR (#F_ACAUSALE>=#F_DACAUSALE)
STR_EXPR (#F_ACAUSALE="")||(#F_ACAUSALE>=#F_DACAUSALE)
WARNING "La causale finale deve seguire quella iniziale"
CHECKTYPE SEARCH
GROUP 5
END
STRING F_ADESCAUS 50
BEGIN
PROMPT 22 11 ""
PROMPT 23 15 ""
COPY USE F_DADESCAUS
INPUT DESCR F_ADESCAUS
COPY DISPLAY F_DADESCAUS
COPY OUTPUT F_ACAUSALE
CHECKTYPE SEARCH
GROUP 5
END
ENDPAGE

View File

@ -4,7 +4,7 @@ TOOLBAR "" 0 20 0 0
BUTTON DLG_LINK 10 2
BEGIN
PROMPT -12 -11 ""
PROMPT -12 -11 "~Collega"
PICTURE BMP_LINK
END
@ -63,7 +63,7 @@ SPREADSHEET F_MASTRINI 0 -6
BEGIN
PROMPT 1 2 "Mastrini"
FLAGS "DM2"
ITEM "Data Op. \nData Com.@10F"
ITEM "Data Op. \nData Doc.@10F"
ITEM "C@1F"
ITEM "Causale@20F"
ITEM "Operazione@20"
@ -71,7 +71,7 @@ BEGIN
ITEM "Avere@15R"
ITEM "N.Doc. \nN.Prot.@7"
ITEM "Importo@17R"
ITEM "Saldo fine\ngiornata@17R"
ITEM "Saldo Fine\nGiornata@17R"
END
TEXT DLG_NULL
@ -91,7 +91,7 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 1 -4 "Prog. precedenti"
PROMPT 1 -4 "Progr. precedenti"
END
STRING F_TOTPRO_SAL 17

View File

@ -261,11 +261,14 @@ bool TSaldo::data_limite_bilancio(int bilancio, int g, int c, long s, const TDat
num_rec++;
if ((num_rec & 0x7F) == 0)
{
TString80 msg;
const long sec = (clock() - clock_start) / CLOCKS_PER_SEC;
msg.format("%ld records at %ld rec/sec", num_rec, num_rec / sec);
xvt_statbar_set(msg);
do_events();
const double sec = (clock() - clock_start) / CLOCKS_PER_SEC;
if (sec > 0.0)
{
TString80 msg;
msg.format("%ld records at %ld rec/sec", num_rec, long(num_rec/sec));
xvt_statbar_set(msg);
do_events();
}
}
#endif