Patch level : 12.0 412
Files correlati : Commento : Maschera: - Aggiunti bottone "Esporta" e i restanti da helpbar - Sistemata dimensione maschera per le righe - Aggiunto collegamento prima nota + bottone eliminazione record (non testato) Programma: - Aggiunta gestione righe custom - Sistemato bottone elabora - Aggiunto connessione prima nota - Sistemata stampa e aggiunta tolleranza per i valori degli imponibili - Aggiunto controllo se tolgo il flag di invio per una riga documento, ma non mi ricordo se va git-svn-id: svn://10.65.10.50/branches/R_10_00@23913 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
16e6dfdae1
commit
d723354920
@ -494,6 +494,8 @@ TTrFa_cursors::~TTrFa_cursors()
|
|||||||
{
|
{
|
||||||
if(c_rmoviva != NULL)
|
if(c_rmoviva != NULL)
|
||||||
delete c_rmoviva;
|
delete c_rmoviva;
|
||||||
|
if(c_trasfatt != NULL)
|
||||||
|
delete c_trasfatt;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf)
|
int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf)
|
||||||
@ -504,8 +506,10 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt
|
|||||||
return_code err;
|
return_code err;
|
||||||
// Record
|
// Record
|
||||||
TRectype record = _next(err, tipocf, codcf);
|
TRectype record = _next(err, tipocf, codcf);
|
||||||
if(record.get("NUMREG") == "42094")
|
if(err == eof)
|
||||||
bool tolla = true;
|
{
|
||||||
|
record = _nextCust(err, tipocf, codcf);
|
||||||
|
}
|
||||||
while(err < nextmov)
|
while(err < nextmov)
|
||||||
{
|
{
|
||||||
// Se ho trovato un record custom o non trovo il suo codiva tra i record custom lo salvo
|
// Se ho trovato un record custom o non trovo il suo codiva tra i record custom lo salvo
|
||||||
@ -524,9 +528,10 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt
|
|||||||
// Salvo il record nell'array
|
// Salvo il record nell'array
|
||||||
recimposte.add(record.get("CODIVA"), record);
|
recimposte.add(record.get("CODIVA"), record);
|
||||||
}
|
}
|
||||||
|
if(err == foundidcust) break;
|
||||||
record = _next(err, tipocf, codcf);
|
record = _next(err, tipocf, codcf);
|
||||||
}
|
}
|
||||||
ok = err != eof;
|
ok = err != eofcust;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -611,6 +616,25 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
|
|||||||
return retRec;
|
return retRec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& codcf)
|
||||||
|
{
|
||||||
|
bool ok;
|
||||||
|
// Preparo il nuovo cursore
|
||||||
|
if(_newCust)
|
||||||
|
{
|
||||||
|
ok = c_trasfatt->move_first();
|
||||||
|
_newCust = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok = c_trasfatt->move_next();
|
||||||
|
}
|
||||||
|
tipocf = c_trasfatt->get("TIPO").as_string();
|
||||||
|
codcf = c_trasfatt->get("CODCF").as_string();
|
||||||
|
code = ok ? foundidcust : eofcust;
|
||||||
|
return c_trasfatt->cursor()->curr();
|
||||||
|
}
|
||||||
|
|
||||||
/* Utilizzo questa funzione per filtrare al meglio i record, tutti i casi che devo omettere verranno rilevati e ritorneranno false
|
/* Utilizzo questa funzione per filtrare al meglio i record, tutti i casi che devo omettere verranno rilevati e ritorneranno false
|
||||||
* Nota bene: viene sfruttato un puntatore di TISA_Recordset per non creare nuovi oggetti e velocizzare la chiamata
|
* Nota bene: viene sfruttato un puntatore di TISA_Recordset per non creare nuovi oggetti e velocizzare la chiamata
|
||||||
* a questo punto il programma non ha ancora creato un record di $trasfatt con i dati che mi interessano
|
* a questo punto il programma non ha ancora creato un record di $trasfatt con i dati che mi interessano
|
||||||
@ -638,11 +662,15 @@ bool TTrFa_cursors::checkRecord(TISAM_recordset* rec)
|
|||||||
|
|
||||||
int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod)
|
int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod)
|
||||||
{
|
{
|
||||||
TString query = "USE RMOVIVA\n";
|
TString query = "USE RMOVIVA\n", queryCust = "USE TRASFATT\n";
|
||||||
query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << tipocf << "\")";
|
query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << tipocf << "\")";
|
||||||
|
queryCust << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << tipocf << "\")";
|
||||||
|
|
||||||
if(codcf > 0)
|
if(codcf > 0)
|
||||||
|
{
|
||||||
query << "&&STR((23.CODCF=#CODCF))";
|
query << "&&STR((23.CODCF=#CODCF))";
|
||||||
|
queryCust << "&&STR((CODCF=#CODCF))";
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
switch(cod)
|
switch(cod)
|
||||||
{
|
{
|
||||||
@ -658,22 +686,31 @@ int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
query << "\nJOIN MOV INTO NUMREG==NUMREG\n";
|
query << "\nJOIN MOV INTO NUMREG==NUMREG\n";
|
||||||
|
queryCust << "\nFROM NUMREG=" << MOV_CUSTOM;
|
||||||
|
|
||||||
c_rmoviva = new TISAM_recordset(query);
|
c_rmoviva = new TISAM_recordset(query);
|
||||||
|
c_trasfatt= new TISAM_recordset(queryCust);
|
||||||
|
|
||||||
if(dal.empty()) dal = "20170101"; // Data in cui questo modulo è diventato valido
|
if(dal.empty()) dal = "20170101"; // Data in cui questo modulo è diventato valido
|
||||||
if(al.empty()) al = TODAY;
|
if(al.empty()) al = TODAY;
|
||||||
|
|
||||||
c_rmoviva->set_var("#DADATAREG", dal);
|
c_rmoviva->set_var("#DADATAREG", dal);
|
||||||
c_rmoviva->set_var("#ADATAREG", al);
|
c_rmoviva->set_var("#ADATAREG", al);
|
||||||
|
c_trasfatt->set_var("#DADATAREG", dal);
|
||||||
|
c_trasfatt->set_var("#ADATAREG", al);
|
||||||
|
|
||||||
if(codcf > 0)
|
if(codcf > 0)
|
||||||
|
{
|
||||||
c_rmoviva->set_var("#CODCF", codcf);
|
c_rmoviva->set_var("#CODCF", codcf);
|
||||||
|
c_trasfatt->set_var("#CODCF", codcf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int items = c_rmoviva->items() + c_trasfatt->items();
|
||||||
if(c_rmoviva->items() > ZERO)
|
if(items > 0)
|
||||||
{
|
{
|
||||||
_newMov = true;
|
_newMov = true;
|
||||||
return c_rmoviva->items();
|
_newCust = true;
|
||||||
|
return items;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -746,6 +783,10 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
TToken_string& row = s.row(jolly);
|
TToken_string& row = s.row(jolly);
|
||||||
const TRecnotype progr = row.get_long(0);
|
const TRecnotype progr = row.get_long(0);
|
||||||
return progr >= MOV_CUSTOM;
|
return progr >= MOV_CUSTOM;
|
||||||
|
} else
|
||||||
|
if(e == se_enter)
|
||||||
|
{
|
||||||
|
//primaNota(o,e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case A_DATAREG:
|
case A_DATAREG:
|
||||||
@ -891,6 +932,53 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case DLG_RECALC:
|
||||||
|
if(e == fe_button)
|
||||||
|
next_page(1);
|
||||||
|
break;
|
||||||
|
case DLG_USER:
|
||||||
|
if (e == fe_button || e == fe_init)
|
||||||
|
{
|
||||||
|
const long numreg = o.mask().get_long(A_NUMERO);
|
||||||
|
const bool enab = (numreg > 0) && (numreg < MOV_CUSTOM);
|
||||||
|
if (e == fe_button && enab)
|
||||||
|
{
|
||||||
|
o.disable(); // Tecnica anti doppio click!
|
||||||
|
TRectype mov(LF_MOV);
|
||||||
|
mov.put(MOV_NUMREG, numreg);
|
||||||
|
mov.edit();
|
||||||
|
o.enable();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
o.enable(enab);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DLG_DELREC:
|
||||||
|
if (e == fe_button && o.active())
|
||||||
|
{
|
||||||
|
const long progr = o.mask().get_long(A_NUMERO);
|
||||||
|
TString codalq = o.mask().get(A_ALIQUOTA);
|
||||||
|
TString key; key << progr << "|" << codalq;
|
||||||
|
if (progr >= MOV_CUSTOM)
|
||||||
|
{
|
||||||
|
if(cache().get(LF_TRASFATT, key).full())
|
||||||
|
{
|
||||||
|
TLocalisamfile trasfat(LF_TRASFATT);
|
||||||
|
trasfat.put("NUMREG", progr);
|
||||||
|
trasfat.put("CODIVA", codalq);
|
||||||
|
const int err = trasfat.remove();
|
||||||
|
if (err != NOERR)
|
||||||
|
return error_box(FR("Errore di cancellazione: %d"), err);
|
||||||
|
}
|
||||||
|
// In qualsiasi caso elimino sta riga
|
||||||
|
TSheet_field& s = o.mask().sfield(F_RIGHE);
|
||||||
|
TToken_string& row = s.row(jolly);
|
||||||
|
row.destroy(jolly);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return error_box(TR("Riga non cancellabile"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -900,7 +988,13 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
{
|
{
|
||||||
if (id >= START_SHEET && id < END_SHEET && id != A_FORZATA)
|
if (id >= START_SHEET && id < END_SHEET && id != A_FORZATA)
|
||||||
{
|
{
|
||||||
|
// Se ho modificato l'impostazione dell'invio non va segnata la modifica MA devo togliere o mettere il flag a tutti quelli con movimento uguale
|
||||||
|
if(id != A_INVIO)
|
||||||
o.mask().set(A_FORZATA, true);
|
o.mask().set(A_FORZATA, true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
changeInvio(o.mask().get(A_TIPOCF), o.mask().get(A_CODCF), o.mask().get(A_NUMDOC), o.mask().get(A_INVIO));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (e == fe_modify && jolly == 0)
|
if (e == fe_modify && jolly == 0)
|
||||||
@ -914,6 +1008,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TTrFa_mask::loadConfig()
|
void TTrFa_mask::loadConfig()
|
||||||
{
|
{
|
||||||
// Rilevo i tipi scelti
|
// Rilevo i tipi scelti
|
||||||
@ -994,11 +1089,15 @@ bool TTrFa_mask::checkAll()
|
|||||||
stampa.setheaderline(2, riga);
|
stampa.setheaderline(2, riga);
|
||||||
riga.reset();
|
riga.reset();
|
||||||
stampa.setheaderline(4, riga);
|
stampa.setheaderline(4, riga);
|
||||||
|
stampa.print(riga);
|
||||||
TSheet_field& sheet = sfield(F_RIGHE);
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||||
{
|
{
|
||||||
checkRec(&stampa, *strarr);
|
checkRec(&stampa, *strarr);
|
||||||
}
|
}
|
||||||
|
riga.reset();
|
||||||
|
riga.put(TR("------------------ Fine controllo! ------------------"), 30);
|
||||||
|
stampa.print(riga);
|
||||||
stampa.close();
|
stampa.close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1042,9 +1141,9 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string rec)
|
|||||||
|
|
||||||
real realImp = imponibile * codiva.percentuale() / CENTO;
|
real realImp = imponibile * codiva.percentuale() / CENTO;
|
||||||
realImp.round(2);
|
realImp.round(2);
|
||||||
if(imposta != realImp)
|
if(imposta > realImp + TOLLARANZA || imposta < realImp - TOLLARANZA)
|
||||||
{
|
{
|
||||||
msgerr.cut(0) << "Imposta errata, valore dichiarato: " << imposta.string() << " valore corretto: " << realImp.string();
|
msgerr.cut(0) << "Imposta errata, valore dichiarato: " << imposta.string() << " valore \"potenzialmente\" corretto: " << realImp.string();
|
||||||
printError(stampa, numMov, numDoc, msgerr);
|
printError(stampa, numMov, numDoc, msgerr);
|
||||||
coderr << "3;";
|
coderr << "3;";
|
||||||
}
|
}
|
||||||
@ -1092,6 +1191,24 @@ TRecnotype TTrFa_mask::nuovo_progr() const
|
|||||||
return numreg;
|
return numreg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dato un cliente e il suo numero documento imposto il nuovo flag di invio su tutti i campi
|
||||||
|
void TTrFa_mask::changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const
|
||||||
|
{
|
||||||
|
TSheet_field& sheet = sfield(F_RIGHE);
|
||||||
|
TString rtipo, rcod, rnum;
|
||||||
|
FOR_EACH_SHEET_ROW(sheet, r, strarr)
|
||||||
|
{
|
||||||
|
// Ricevo i parametri della riga
|
||||||
|
rtipo.cut(0); rtipo << strarr->get_char(_tipocf);
|
||||||
|
rcod.cut(0); rcod << strarr->get_int(_codcf);
|
||||||
|
rnum.cut(0); rnum << strarr->get(_numdoc);
|
||||||
|
if(tipocf == rtipo && codcf == rcod && rnum == numdoc)
|
||||||
|
{
|
||||||
|
strarr->add(invio, _invio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TTrFa_mask::load_sheet()
|
void TTrFa_mask::load_sheet()
|
||||||
{
|
{
|
||||||
const char tipo = get(F_TIPOCF)[0];
|
const char tipo = get(F_TIPOCF)[0];
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#define B_TIPO_BOLLADOG 413
|
#define B_TIPO_BOLLADOG 413
|
||||||
#define B_TIPO_STORDOC 414
|
#define B_TIPO_STORDOC 414
|
||||||
|
|
||||||
#define END_BOOLEAN 413
|
#define END_BOOLEAN 414
|
||||||
|
|
||||||
#define END_MASK 421
|
#define END_MASK 421
|
||||||
|
|
||||||
|
@ -25,7 +25,13 @@ BEGIN
|
|||||||
PICTURE TOOL_EXCEL
|
PICTURE TOOL_EXCEL
|
||||||
END
|
END
|
||||||
|
|
||||||
#include <elabar.h>
|
BUTTON DLG_OK 2 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Esporta"
|
||||||
|
PICTURE TOOL_ELABORA
|
||||||
|
END
|
||||||
|
|
||||||
|
#include <helpbar.h>
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
PAGE "Impostazioni" 0 2 0 0
|
PAGE "Impostazioni" 0 2 0 0
|
||||||
@ -176,7 +182,7 @@ ENDPAGE
|
|||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
PAGE "Riga" -1 -1 -1 -1
|
PAGE "Riga" -1 -1 69 14
|
||||||
|
|
||||||
BOOLEAN A_SPEDITA
|
BOOLEAN A_SPEDITA
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -356,7 +362,6 @@ BEGIN
|
|||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
CURRENCY A_IMPONIBILE 12
|
CURRENCY A_IMPONIBILE 12
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 42 8 "Imponibile"
|
PROMPT 42 8 "Imponibile"
|
||||||
@ -397,7 +402,7 @@ END
|
|||||||
|
|
||||||
STRING A_CODERR 10
|
STRING A_CODERR 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT -1 -1 "Codice Fiscale"
|
PROMPT 0 13 "Codici errori"
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -410,6 +415,18 @@ BEGIN
|
|||||||
PROMPT 1 1 ""
|
PROMPT 1 1 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_USER 2 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "Collega"
|
||||||
|
PICTURE TOOL_LINK
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_DELREC 2 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "Elimina"
|
||||||
|
PICTURE TOOL_DELREC
|
||||||
|
END
|
||||||
|
|
||||||
BUTTON DLG_CANCEL 2 2
|
BUTTON DLG_CANCEL 2 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 4 1 ""
|
PROMPT 4 1 ""
|
||||||
|
@ -26,9 +26,10 @@ enum return_code
|
|||||||
{
|
{
|
||||||
found, // Trovato
|
found, // Trovato
|
||||||
foundcust, // Trovato in trasfatt
|
foundcust, // Trovato in trasfatt
|
||||||
|
foundidcust,// Trovato ma con id customizzato
|
||||||
nextmov, // Trovato ma cambiato movimento
|
nextmov, // Trovato ma cambiato movimento
|
||||||
eof, // EOF rmoviva
|
eof, // EOF rmoviva
|
||||||
eofm, // EOF mov
|
eofcust, // EOF trasfatt
|
||||||
after // File mov su un movimento dopo rispetto a rmoviva
|
after // File mov su un movimento dopo rispetto a rmoviva
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ enum filter_fatt
|
|||||||
#define SHEET_GAP 101
|
#define SHEET_GAP 101
|
||||||
#define DTE_PROVV "DTE0000001"
|
#define DTE_PROVV "DTE0000001"
|
||||||
#define DTR_PROVV "DTR0000001"
|
#define DTR_PROVV "DTR0000001"
|
||||||
|
#define TOLLARANZA 0.05
|
||||||
|
|
||||||
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
|
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
|
||||||
* per avere l'inserimento nello sheet corretto */
|
* per avere l'inserimento nello sheet corretto */
|
||||||
@ -145,13 +147,16 @@ class TTrFa_cursors : TObject
|
|||||||
{
|
{
|
||||||
friend class TCursor;
|
friend class TCursor;
|
||||||
TISAM_recordset* c_rmoviva;
|
TISAM_recordset* c_rmoviva;
|
||||||
|
TISAM_recordset* c_trasfatt;
|
||||||
filter_fatt filFat;
|
filter_fatt filFat;
|
||||||
bool _newMov;
|
bool _newMov;
|
||||||
|
bool _newCust;
|
||||||
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
|
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
|
||||||
TToken_string _alqCust;
|
TToken_string _alqCust;
|
||||||
|
|
||||||
bool filOk(bool alreadySent) { return (filFat == all) || (filFat == sent && alreadySent) || (filFat == toSend && !alreadySent); }
|
bool filOk(bool alreadySent) { return (filFat == all) || (filFat == sent && alreadySent) || (filFat == toSend && !alreadySent); }
|
||||||
TRectype _next(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento
|
TRectype _next(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento
|
||||||
|
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento tra quelli custom
|
||||||
bool checkRecord(TISAM_recordset* rec);
|
bool checkRecord(TISAM_recordset* rec);
|
||||||
public:
|
public:
|
||||||
TTrFa_cursors() : filFat(all) {};
|
TTrFa_cursors() : filFat(all) {};
|
||||||
@ -184,7 +189,7 @@ protected:
|
|||||||
TString revCharge(TString numreg) const;
|
TString revCharge(TString numreg) const;
|
||||||
TString getRFSO(TString codrfso) const;
|
TString getRFSO(TString codrfso) const;
|
||||||
TRecnotype nuovo_progr() const;
|
TRecnotype nuovo_progr() const;
|
||||||
|
void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const;
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user