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 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); TToken_string& row = cg.row(r);
const char tipo = row_type(row); // Tipo della riga in esame 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(); TPrimanota_application& a = app();
if (a._as400) if (a._as400)
return TRUE; return TRUE;
if (k = K_INS || k == K_CTRL+K_DEL)
return TRUE;
TToken_string& row = iva.row(r); TToken_string& row = iva.row(r);
const TCausale& cau = a.causale(); const TCausale& cau = a.causale();

View File

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

View File

@ -56,7 +56,6 @@ protected:
protected: protected:
TList_object* detach_lstobj(long index); TList_object* detach_lstobj(long index);
TList_object* lstobjptr(long index) const; TList_object* lstobjptr(long index) const;
void change_step(long step);
public: public:
long items() const { return _items; } long items() const { return _items; }
@ -76,7 +75,8 @@ public:
TObject* detach(long pos); TObject* detach(long pos);
bool remove(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); TList(long expected_size = 128L);
virtual ~TList(); 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); change_step(step);
return step;
} }
long TList::insert(TObject* obj, long index) long TList::insert(TObject* obj, long index)
@ -318,8 +319,8 @@ protected:
TImporto& si, TImporto& da, TImporto& av, TImporto& sf) const; TImporto& si, TImporto& da, TImporto& av, TImporto& sf) const;
public: public:
void read(int g, int c, long s, int esercizio); void read(int g, int c, long s, int esercizio, bool ignora_movap = FALSE);
void read(const TBill& b, int esercizio); void read(const TBill& b, int esercizio, bool ignora_movap = FALSE);
void reread(); void reread();
const TImporto& saldo_iniziale() const; const TImporto& saldo_iniziale() const;
@ -331,8 +332,8 @@ public:
TImporto saldo_finale_chiusura() const; TImporto saldo_finale_chiusura() const;
TBalance(); TBalance();
TBalance(int g, int c, long s, int esercizio); TBalance(int g, int c, long s, int esercizio, bool ignora_movap = FALSE);
TBalance(const TBill& b, int esercizio); TBalance(const TBill& b, int esercizio, bool ignora_movap = FALSE);
virtual ~TBalance() { } 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, 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); 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; 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 const TImporto& TBalance::saldo_iniziale() const
@ -553,7 +559,6 @@ public:
long last(tipo_riga_mastrino tipo = riga_mastrino) const; long last(tipo_riga_mastrino tipo = riga_mastrino) const;
void destroy() { _riga.destroy(); } void destroy() { _riga.destroy(); }
int esercizio() const { return _esercizio; }
const real& progressivo_dare_iniziale() const { return _pdare_ini; } const real& progressivo_dare_iniziale() const { return _pdare_ini; }
const real& progressivo_avere_iniziale() const { return _pavere_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; } real progressivo_avere_periodo() const { return _pavere_ini + _pavere_per; }
TImporto saldo_periodo() const; 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 expandable(long rec) const;
bool expand(long rec); bool expand(long rec);
bool collapse(long rec); bool collapse(long rec);
@ -671,10 +681,8 @@ void TMastrino::read(const TBill& conto,
_da_caus = dc; _da_caus = dc;
_a_caus = ac.blank() ? "zzz" : ac; // Se vuota sceglie la massima causale _a_caus = ac.blank() ? "zzz" : ac; // Se vuota sceglie la massima causale
const TDate& min_data_reg = _da_data; TDate max_data_reg = _a_data;
TDate max_data_reg; long num_giorni = _a_data - inizio_esercizio + 1;
long num_giorni = _a_data - _da_data + 1;
if (_esercizio > 0) if (_esercizio > 0)
{ {
const int succ = esercizi.next(ae); const int succ = esercizi.next(ae);
@ -686,8 +694,6 @@ void TMastrino::read(const TBill& conto,
else else
max_data_reg = esercizi[ae].fine(); max_data_reg = esercizi[ae].fine();
} }
else
max_data_reg = _a_data;
TString caption(80); TString caption(80);
caption.format("Caricamento mastrino %03d.%03d.%06ld", 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); TProgind pi(num_giorni, caption, FALSE, TRUE, 48);
// Stima dimensione mastrino // 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: // Valori dei saldi fino alla data di inizio stampa:
// Vengono inizializzati con i saldi iniziali dell'esercizio, // 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 // vanno dall'inizio dell'esercizio al giorno precedente
// la data di inizio stampa // la data di inizio stampa
const TBalance saldo(_conto, ae); const TBalance saldo(_conto, ae, TRUE);
_pdare_ini = saldo.progressivo_dare_iniziale(); _pdare_ini = saldo.progressivo_dare_iniziale();
_pavere_ini = saldo.progressivo_avere_iniziale(); _pavere_ini = saldo.progressivo_avere_iniziale();
_pdare_fin = saldo.progressivo_dare_finale(); _pdare_fin = saldo.progressivo_dare_finale();
@ -716,7 +724,7 @@ void TMastrino::read(const TBill& conto,
_pdare_per = _pavere_per = ZERO; _pdare_per = _pavere_per = ZERO;
conto.put(rmov_rec); 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_datareg (rmov_rec, RMV_DATAREG);
const TRecfield rmov_numreg (rmov_rec, RMV_NUMREG); const TRecfield rmov_numreg (rmov_rec, RMV_NUMREG);
@ -754,11 +762,11 @@ void TMastrino::read(const TBill& conto,
num_rec++; num_rec++;
if ((num_rec & 0x7F) == 0) if ((num_rec & 0x7F) == 0)
{ {
const long sec = (clock() - clock_start) / CLOCKS_PER_SEC; const double sec = (clock() - clock_start) / CLOCKS_PER_SEC;
if (sec > 0) if (sec > 0.0)
{ {
TString80 msg; 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); 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; const TDate data_corrente = _esercizio <= 0 ? data_reg : (TDate)mov_datacomp;
if (data_corrente > _a_data) if (data_corrente > _a_data)
continue; 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 char sezione = *((const char*)rmov_sezione);
const real importo((const char*)rmov_importo); const real importo((const char*)rmov_importo);
if (data_corrente < _da_data) if (data_corrente < _da_data)
{ {
if (data_corrente >= inizio_esercizio) if (sezione == 'D')
{ _pdare_ini += importo;
if (sezione == 'D') else
_pdare_ini += importo; _pavere_ini += importo;
else
_pavere_ini += importo;
}
else
continue;
} }
else else
{ {
@ -807,13 +818,6 @@ void TMastrino::read(const TBill& conto,
rmov().recno(), mov().recno(), rmov().recno(), mov().recno(),
_pdare_per, _pavere_per, data_reg); _pdare_per, _pavere_per, data_reg);
_riga.append(r); _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; return e;
} }
// Genera le righe di contropartita di una riga del mastrino
bool TMastrino::expand(long rec) bool TMastrino::expand(long rec)
{ {
bool ok = expandable(rec); bool ok = expandable(rec);
if (ok) if (ok)
{ {
const TRectype& head = testata(rec); const TRectype& head = testata(rec); // Testata movimento
const long numreg = head.get_long(MOV_NUMREG); 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); rmov().setkey(1); // Usa chiave NUMREG+NUMRIG
TRectype& curr = rmov().curr(); TRectype& curr = rmov().curr(); // Record corrente
curr.zero();
curr.put(RMV_NUMREG, numreg); const TRecfield rnumreg (curr, RMV_NUMREG); // Numero di registrazione corrente
for (int err = rmov().read(_isgteq); err == NOERR; err = rmov().next()) 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; break;
const TBill bill(curr, TRUE); // Legge il conto di contropartita if (numrig != (int)rnumrig) // Ignora la riga gia' presente
if (bill == _conto)
{ {
real dare, avere; real dare, avere; // Costruisce importo della riga
if (curr.get_char(RMV_SEZIONE) == 'D') if (*(const char*)rsezione == 'D')
dare = curr.get_real(RMV_IMPORTO); dare = rimporto;
else else
avere = curr.get_real(RMV_IMPORTO); avere = rimporto;
// Aggiunge una riga di contropartita al mastrino
const TDate data(head.get(MOV_DATAREG));
TRiga_mastrino* r = new TRiga_mastrino(riga_contropartita, TRiga_mastrino* r = new TRiga_mastrino(riga_contropartita,
rmov().recno(), mov().recno(), rmov().recno(), mov().recno(),
dare, avere, data); dare, avere, datareg);
_riga.append(r, rec); _riga.append(r, rec++);
} }
} }
} }
return ok; return ok;
} }
// Elimina le righe di contropartita di una riga del mastrino
bool TMastrino::collapse(long rec) bool TMastrino::collapse(long rec)
{ {
if (row(rec).tipo() != riga_mastrino) bool ok = TRUE; // Posso eliminare?
rec = pred(rec, riga_mastrino); if (row(rec).tipo() != riga_mastrino) // Se non sono su una riga mastrino ...
bool ok = !expandable(rec); rec = pred(rec, riga_mastrino); // ... mi sposto sulla precedente
if (ok) 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) while (rec < items() && row(rec).tipo() != riga_mastrino)
_riga.remove(rec); _riga.remove(rec);
} }
@ -936,13 +955,14 @@ bool TMastrino::collapse(long rec)
class TGrid_control; class TGrid_control;
class TGrid_cell : public TObject
class TGrid_cell : public TFixed_string
{ {
XI_EVENT* _xiev; XI_EVENT* _xiev;
public: public:
void set(const char* txt); TString& set(const char* txt);
void set(long num); TString& set(long num);
void set_icon(int id); void set_icon(int id);
void show_button(bool on = TRUE); void show_button(bool on = TRUE);
void hide_button() { show_button(FALSE); } void hide_button() { show_button(FALSE); }
@ -951,10 +971,11 @@ public:
void set_colors(COLOR back, COLOR fore); void set_colors(COLOR back, COLOR fore);
short get_column() const { return _xiev->v.cell_request.col_nbr; } 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() { } virtual ~TGrid_cell() { }
}; };
@ -1178,7 +1199,7 @@ TGrid_control::TGrid_control(
l->movable_columns = TRUE; l->movable_columns = TRUE;
l->fixed_columns = fixed_columns; l->fixed_columns = fixed_columns;
l->max_lines_in_cell = lines_in_cell; l->max_lines_in_cell = lines_in_cell;
l->scroll_bar = TRUE; l->scroll_bar = TRUE;
l->scroll_bar_button = TRUE; l->scroll_bar_button = TRUE;
l->white_space_color = MASK_DARK_COLOR; l->white_space_color = MASK_DARK_COLOR;
l->rule_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 else
{ {
if (cell.get_size() > 2) if (cell.size() > 2)
{
cell.set(rec+1); 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 else
@ -1745,33 +1771,31 @@ void TGrid_control::save_columns_order() const
// TGrid_cell // 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!) // Setta il testo di una cella (Mai piu' testo troppo lungo!)
// Se c'e' gia' un'icona la elimina // Se c'e' gia' un'icona la elimina
void TGrid_cell::set(const char* txt) TString& TGrid_cell::set(const char* txt)
{ {
char* str = _xiev->v.cell_request.s; strncpy(txt, size());
if (txt) if (not_empty())
{
const short& max = _xiev->v.cell_request.len;
strncpy(str, txt, max);
str[max-1] = '\0';
}
else
str[0] = '\0';
if (str[0])
{ {
int& icon = _xiev->v.cell_request.icon_rid; int& icon = _xiev->v.cell_request.icon_rid;
if (icon) if (icon)
icon = 0; icon = 0;
} }
return *this;
} }
void TGrid_cell::set(long num) TString& TGrid_cell::set(long num)
{ {
char buff[16]; char buff[16];
sprintf(buff, "%ld", num); sprintf(buff, "%ld", num);
set(buff); return set(buff);
} }
// Setta l'icona di una cella // Setta l'icona di una cella
@ -2128,6 +2152,8 @@ HIDDEN void set_imp(TMask_field& f, const TImporto& imp)
str << ' ' << imp.sezione(); str << ' ' << imp.sezione();
f.set(str); f.set(str);
} }
else
f.reset();
} }
void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell) 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) if (riga.tipo() == riga_mastrino)
{ {
const TRectype& mov = _mastrino.testata(rec); const TRectype& mov = _mastrino.testata(rec);
TFixed_string text(cell.get_buffer(), cell.get_size()); cell = riga.data().string();
text = riga.data().string(); cell << ' ' << mov.get(MOV_DATADOC);
text << ' ' << mov.get(MOV_DATACOMP);
} }
break; break;
case 102: 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 TRectype& mov = _mastrino.testata(rec);
const int anno = _esercizi.date2esc(riga.data()); const int anno = _esercizi.date2esc(riga.data());
const int eser = mov.get_int(MOV_ANNOES); 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); cell.set_icon(comp ? ICO_CHECK_ON : ICO_CHECK_OFF);
} }
break; break;
@ -2164,8 +2189,7 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
else else
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size()); cell.format("%03d.%03d.%06ld",
text.format("%03d.%03d.%06ld",
rmov.get_int(RMV_GRUPPO), rmov.get_int(RMV_GRUPPO),
rmov.get_int(RMV_CONTO), rmov.get_int(RMV_CONTO),
rmov.get_long(RMV_SOTTOCONTO)); 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) if (riga.tipo() == riga_mastrino)
{ {
const TRectype& mov = _mastrino.testata(rec); const TRectype& mov = _mastrino.testata(rec);
cell.set(mov.get(MOV_DESCR));
TFixed_string text(cell.get_buffer(), cell.get_size()); if (cell.empty())
text = mov.get(MOV_DESCR);
if (text.empty())
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
text = rmov.get(RMV_DESCR); cell.set(rmov.get(RMV_DESCR));
} }
} }
else else
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size()); cell.set(rmov.get(RMV_DESCR));
text = rmov.get(RMV_DESCR); if (cell.empty())
if (text.empty())
{ {
const TBill conto(rmov); const TBill conto(rmov);
text = conto.descrizione(); cell.set(conto.descrizione());
} }
} }
break; break;
@ -2200,31 +2221,29 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
if (rmov.get_char(RMV_SEZIONE) == 'D') if (rmov.get_char(RMV_SEZIONE) == 'D')
cell.set(rmov.get_real(RMV_IMPORTO).string(".")); cell = rmov.get_real(RMV_IMPORTO).string(".");
} }
break; break;
case 106: case 106:
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
if (rmov.get_char(RMV_SEZIONE) == 'A') if (rmov.get_char(RMV_SEZIONE) == 'A')
cell.set(rmov.get_real(RMV_IMPORTO).string(".")); cell = rmov.get_real(RMV_IMPORTO).string(".");
} }
break; break;
case 107: case 107:
if (riga.tipo() == riga_mastrino) if (riga.tipo() == riga_mastrino)
{ {
const TRectype& mov = _mastrino.testata(rec); const TRectype& mov = _mastrino.testata(rec);
TFixed_string text(cell.get_buffer(), cell.get_size()); cell = mov.get(MOV_NUMDOC); cell.left_just(7);
text = mov.get(MOV_NUMDOC); text.left_just(7); cell << ' ' << mov.get(MOV_PROTIVA);
text << ' ' << mov.get(MOV_PROTIVA);
} }
break; break;
case 108: case 108:
{ {
const TRectype& rmov = _mastrino.riga(rec); const TRectype& rmov = _mastrino.riga(rec);
TFixed_string text(cell.get_buffer(), cell.get_size()); cell = rmov.get_real(RMV_IMPORTO).string(".");
text = rmov.get_real(RMV_IMPORTO).string("."); cell << ' ' << rmov.get(RMV_SEZIONE);
text << ' ' << rmov.get(RMV_SEZIONE);
} }
break; break;
case 109: case 109:
@ -2242,9 +2261,8 @@ void TMastrini_grid::cell_request(long rec, short id, TGrid_cell& cell)
TImporto imp = riga.saldo(); TImporto imp = riga.saldo();
imp += _mastrino.saldo_iniziale(); imp += _mastrino.saldo_iniziale();
imp.normalize(); imp.normalize();
TFixed_string text(cell.get_buffer(), cell.get_size()); cell = imp.valore().string(".");
text = imp.valore().string("."); cell << ' ' << imp.sezione();
text << ' ' << imp.sezione();
} }
} }
break; break;
@ -2297,15 +2315,35 @@ void TMastrini_grid::on_grid_button()
const long last_con = _mastrino.last(riga_contropartita); const long last_con = _mastrino.last(riga_contropartita);
// Se non esistono contropartite devo espandere le righe // Se non esistono contropartite devo espandere le righe
const bool expand = last_con < 0; const bool expand = last_con < 0;
#ifdef DBG
const clock_t clock_start = clock();
#endif
if (expand) if (expand)
{ {
for (long n = _mastrino.last(riga_mastrino); long step = 0;
n >= 0; n = _mastrino.pred(n, riga_mastrino)) for (long n = _mastrino.first(riga_mastrino);
n < _mastrino.items(); n = _mastrino.succ(n, riga_mastrino))
{ {
if (_mastrino.expandable(n)) if (_mastrino.expandable(n))
_mastrino.expand(n); _mastrino.expand(n);
if (pi) 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 else
@ -2380,7 +2418,11 @@ void TMastrini_grid::reread()
void TMastrini_grid::update_mask() const 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()); set_imp(gm.field(F_TOTPRO_SAL), _mastrino.saldo_iniziale());
gm.set(F_TOTPRO_DAR, _mastrino.progressivo_dare_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 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 data_handler(TMask_field& f, KEY k);
static bool find_handler(TMask_field& f, KEY k); static bool find_handler(TMask_field& f, KEY k);
@ -2615,16 +2658,42 @@ public:
TQuery_mask::TQuery_mask() TQuery_mask::TQuery_mask()
: TMask("cg3600a") : TMask("cg3600a")
{ {
set_handler(F_ESERCIZIO, esercizio_handler);
set_handler(F_DADATA, data_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); 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 TQuery_mask::data_handler(TMask_field& f, KEY k)
{ {
bool ok = TRUE; bool ok = TRUE;
if (f.to_check(k)) if (k == K_ENTER)
{ {
const TQuery_mask& qm = (const TQuery_mask&)f.mask(); const TQuery_mask& qm = (const TQuery_mask&)f.mask();
const TEsercizi_contabili esercizi; 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 g = get_int(F_GRUPPO);
const int c = get_int(F_CONTO); const int c = get_int(F_CONTO);
const long s = get_long((t <= ' ') ? F_SOTTOCONTO : ((t == 'C') ? F_CLIENTE : F_FORNITORE)); const long s = get_long((t <= ' ') ? F_SOTTOCONTO : ((t == 'C') ? F_CLIENTE : F_FORNITORE));
const TBill conto(g, c, s, t); 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); 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.grid().read(conto, annoes, da_data, a_data, da_caus, a_caus);
gm.run(); gm.run();
@ -2790,8 +2853,7 @@ bool TMastrini_video::menu(MENU_TAG mt)
qm.reset(F_SOTTOCONTO); // Azzera sottoconto qm.reset(F_SOTTOCONTO); // Azzera sottoconto
qm.reset(F_CLIENTE); // Azzera cliente qm.reset(F_CLIENTE); // Azzera cliente
qm.reset(F_FORNITORE); // Azzera fornitore qm.reset(F_FORNITORE); // Azzera fornitore
qm.reset(F_DACAUSALE); // Azzera causali qm.reset(-5); // Azzera causali
qm.reset(F_ACAUSALE);
key = qm.run(); key = qm.run();
switch (key) switch (key)

View File

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

View File

@ -4,7 +4,7 @@ TOOLBAR "" 0 20 0 0
BUTTON DLG_LINK 10 2 BUTTON DLG_LINK 10 2
BEGIN BEGIN
PROMPT -12 -11 "" PROMPT -12 -11 "~Collega"
PICTURE BMP_LINK PICTURE BMP_LINK
END END
@ -63,7 +63,7 @@ SPREADSHEET F_MASTRINI 0 -6
BEGIN BEGIN
PROMPT 1 2 "Mastrini" PROMPT 1 2 "Mastrini"
FLAGS "DM2" FLAGS "DM2"
ITEM "Data Op. \nData Com.@10F" ITEM "Data Op. \nData Doc.@10F"
ITEM "C@1F" ITEM "C@1F"
ITEM "Causale@20F" ITEM "Causale@20F"
ITEM "Operazione@20" ITEM "Operazione@20"
@ -71,7 +71,7 @@ BEGIN
ITEM "Avere@15R" ITEM "Avere@15R"
ITEM "N.Doc. \nN.Prot.@7" ITEM "N.Doc. \nN.Prot.@7"
ITEM "Importo@17R" ITEM "Importo@17R"
ITEM "Saldo fine\ngiornata@17R" ITEM "Saldo Fine\nGiornata@17R"
END END
TEXT DLG_NULL TEXT DLG_NULL
@ -91,7 +91,7 @@ END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 1 -4 "Prog. precedenti" PROMPT 1 -4 "Progr. precedenti"
END END
STRING F_TOTPRO_SAL 17 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++; num_rec++;
if ((num_rec & 0x7F) == 0) if ((num_rec & 0x7F) == 0)
{ {
TString80 msg; const double sec = (clock() - clock_start) / CLOCKS_PER_SEC;
const long sec = (clock() - clock_start) / CLOCKS_PER_SEC; if (sec > 0.0)
msg.format("%ld records at %ld rec/sec", num_rec, num_rec / sec); {
xvt_statbar_set(msg); TString80 msg;
do_events(); msg.format("%ld records at %ld rec/sec", num_rec, long(num_rec/sec));
xvt_statbar_set(msg);
do_events();
}
} }
#endif #endif