Patch level : 12.0 752

Files correlati     : cg2100, tsdb
Commento            :
- Modificata maschera per selezionare fatture FPPRO
- Modificata sq_get_date per problemi di compatibilità
This commit is contained in:
Simone Palacino 2019-04-01 14:52:04 +02:00
parent 1f3dccc389
commit c3aebe7a62
10 changed files with 509 additions and 16 deletions

3
exe/f23.dir Normal file
View File

@ -0,0 +1,3 @@
23
0
$mov|96166|96166|577|0|Movimenti di prima nota|NMOV||

68
exe/f23.trr Normal file
View File

@ -0,0 +1,68 @@
23
61
ANNOES|9|4|0|Codice esercizio
NUMREG|3|7|0|Numero di operazione
DATAREG|5|8|0|Data operazione
DATACOMP|5|8|0|Data competenza
DATADOC|5|8|0|Data documento
RITFATT|8|1|0|Fattura in ritardo
DATA74TER|5|8|0|Data per art. 74 ter
MESELIQ|2|2|0|Mese per liquidazione differita
NUMDOC|1|7|0|Numero documento
NUMDOCEXT|1|50|0|Numero documento esteso
TIPODOC|1|2|0|Tipo documento
CODCAUS|1|3|0|Codice causale
DESCR|1|50|0|Descrizione
TIPOMOV|1|1|0|Tipo movimento
ANNOIVA|2|4|0|Anno IVA
REG|1|3|0|Codice registro IVA
PROTIVA|3|6|0|Numero di protocollo IVA
UPROTIVA|3|6|0|Ultimo numero di protocollo IVA se diverso da PROTIVA
CODVAL|1|3|0|Codice valuta
DATACAM|5|8|0|Data del cambio
CAMBIO|4|15|6|Cambio della valuta
REGST|8|1|0|Stampato su registro IVA
STAMPATO|8|1|0|Stampato su giornale
NUMGIO|3|7|0|Numero operazione sul giornale
TIPO|1|1|0|Tipo <C>liente o <F>ornitore
CODCF|3|6|0|Codice
TOTDOC|4|18|3|Totale documento
TOTDOCVAL|4|18|3|Totale documento in valuta
RITFIS|4|18|3|Ritenute fiscali
RITSOC|4|18|3|Ritenute sociali
REVCHARGE|4|18|3|Reverse charge
PROVVIS|1|1|0|Tipo movimento (" " Normale, "P" Provvisorio cancellabile, "C" Provvisorio cespiti)
CODVALI|1|3|0|Codice valuta intra-comunitaria
CAMBIOI|4|15|6|Cambio della valuta intra-comunitaria
CORRLIRE|4|18|3|Corrispettivo in lire intra-comunitario
CORRVALUTA|4|18|3|Corrispettivo in valuta intra-comunitario
DATACOMPI|5|8|0|Data di competenza intra-comunitaria
OCFPI|1|16|0|Codice cliente / fornitore occasionale
CODPAG|1|4|0|Codice pagamento
INVIATO|8|1|0|Inviato ad altra contabilità
INVIVA|8|1|0|Inviata la parte IVA ad altra contabilita'
SCARCON|8|1|0|Scaricata la contabilitá
TNUMREG|3|7|0|Numero di registrazione temporaneo per ricezioni
TOCFP|1|16|0|Codice occasionale temporaneo per ricezioni
DPROVV|1|1|0|Documento originale PROVV
DANNO|2|4|0|Documento originale ANNO
DCODNUM|1|4|0|Documento originale CODNUM
DNDOC|3|7|0|Documento originale NDOC
DATAINC|5|8|0|Data di incasso per liquidazione differita
LIQDIFF|8|1|0|Flag di movimento a liquidazione differita
IVAXCASSA|8|1|0|Flag di movimento IVA per cassa
SPLITPAY|1|1|0|Flag di scissione pagamenti [_=Auto,S=Split,N=Normale]
NOLEGGIO|1|1|0|Tipo veicolo Auto, Camper, Altro, Diporto, aEreo
INVIOFE|5|8|0|Data invio definitivo dati rilevanti
CONTSEP|1|6|0|Contabilità separata
CFBOLLADOG|1|7|0|Codice fornitore a cui è riferita la bolla doganale
TFINVIO|7|1|0|Flag Invio Trasferimento Fatture
TFDATA|5|8|0|Data ultimo invio Trasferimento Fatture
IVALIQ|8|1|0|Iva per cassa liquidata completamente
KEYFPPRO|1|80|0|Chiavi dell'FPPRO [KEYPRGINVIO;KEYHEADERFATT;KEYBODYFATT]
PROGFPPRO|1|18|0|Numero protocollazione in ingresso FPPRO [yyyy-TIPOPROT/NUMPROT]
4
NUMREG|
DATAREG+NUMREG|X
TIPO+CODCF+DATAREG+NUMREG|X
REG+DATAREG+PROTIVA+DATAINC+DATA74TER+NUMREG|X

View File

@ -58,7 +58,7 @@ TMask* TPrimanota_application::load_mask(int n)
TString8 name = "cg2100"; name << char(n == 3 ? 'o' : 'a'+n);
TMask* m = new TMask(name);
switch (n)
{
case 0:
@ -114,8 +114,9 @@ TMask* TPrimanota_application::load_mask(int n)
ism.set_handler(209, sheet_clifo_handler);
ism.set_handler(309, sheet_clifo_handler);
ism.set_handler(CG_RATEO, sheet_rateo_handler);
ism.set_handler(CG_RISCONTO, sheet_risconto_handler);
ism.set_handler(CG_RISCONTO, sheet_risconto_handler);
if (!(fexist("fp0.exe") && !fp_settings().get_db_indirizzo().empty() && !fp_settings().is_f8()))
m->hide(F_PROTFPPRO);
if (_quadratura)
m->set_handler(F_ADJUST_IVA, quadratura_handler);
}
@ -2166,8 +2167,14 @@ bool TPrimanota_application::save(bool check_dirty)
_swap_mask = false;
return true;
}
save_fppro();
return TRelation_application::save(check_dirty);
const bool saved_fppro = save_fppro();
const bool saved = TRelation_application::save(check_dirty);
if (saved && saved_fppro)
{
if (!save_dbmov())
message_box("Attenzione non è stato possibile salvare i riferimenti del documento (in ingresso) nel movimento");
}
return saved;
}
void TPrimanota_application::dump_rec(TConfig & ini, const TRectype & rec, int row, int pref)
@ -2282,15 +2289,27 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
bool TPrimanota_application::save_fppro() const
{
const KEY last = curr_mask().last_key();
if (last != K_SAVE) // Salto se sto uscendo
return true;
TMask& msk = curr_mask();
const KEY last = msk.last_key();
// Controllo che sto registrando un documento FA Fattura di Acquisto
TLocalisamfile clifo(LF_CAUSALI);
clifo.setkey(1);
clifo.put("CODCAUS", msk.get(F_CODCAUS));
if (clifo.read() != NOERR)
return false;
if (clifo.get("TIPODOC") != "FA")
return false;
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!fexist("fp0.exe") || fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8())
return true; // Salto il salvataggio in FPPRO
TMask& msk = curr_mask();
return false; // Salto il salvataggio in FPPRO
if (last != K_SAVE) { // Salto se sto uscendo
message_box("La registrazione del movimento non verrà salvata sul database.");
return false;
}
const TDate data_operazione(msk.get(F_DATAREG));
const TDate data_documento(msk.get(F_DATADOC));
const TString& numero_docext = msk.get(F_NUMDOCEXT);
@ -2345,8 +2364,9 @@ bool TPrimanota_application::save_fppro() const
return false;
}
const TString& dataoraric = fp_db().sq_get("P1_DATAORARIC"); // Devo controllare che la data operazione sia maggiore della data ric
if(data_operazione < TDate(dataoraric))
// Devo controllare che la data operazione sia maggiore della data ric
const TDate dataoraric = fp_db().sq_get_date("P1_DATAORARIC");
if(data_operazione < dataoraric)
{
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
return false;
@ -2364,7 +2384,28 @@ bool TPrimanota_application::save_fppro() const
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';";
fp_db().sq_set_exec(update_query);
return fp_db().sq_commit();
const bool saved = fp_db().sq_commit();
if (!saved)
error_box("Attenzione non è stato possibile registrare la fattura nel database.");
return saved;
}
bool TPrimanota_application::save_dbmov() const
{
const TMask& msk = curr_mask();
const TString& numreg = msk.get(H_NUMREG);
const TString& keyfppro = msk.get(F_PROKEY);
const TString& progfppro = msk.get(F_PROTFPPRO);
TLocalisamfile mov(LF_MOV);
mov.put(MOV_NUMREG, numreg);
bool ok = mov.read() == NOERR;
if (ok)
{
mov.put(MOV_KEYFPPRO, keyfppro);
mov.put(MOV_PROGFPPRO, progfppro);
ok = mov.rewrite() == NOERR;
}
return ok;
}
bool TPrimanota_application::link_cesp(const TMask& msk, const char* action)

View File

@ -19,7 +19,9 @@
#define F_DATACOMP 116
#define F_ANNOIVA 117
#define F_NUMDOCEXT 130
#define F_PROTFPPRO 230
#define F_RITFATT 231
#define F_PROKEY 232
#define F_CLIFO 128
#define F_CODCLIFOR 151
@ -192,4 +194,30 @@
#define K_ANNOES 415
#define K_DATACOMP 416
// Campi per maschera FPPRO
#define F_SHEETFPPRO 601
#define F_CODCLIFORS 602
#define F_COFIS 603
#define F_STATOPAIVS 604
#define F_PIVAS 605
#define F_SHEETFPPROS 606
#define F_NUMEROI 607
#define F_DATAI 608
#define F_TOTDOCI 609
#define F_PROTFPPROI 610
#define F_FPPROKEYSI 611
#define F_SELFPPROS 101
#define F_DATAS 102
#define F_DATAORARICS 103
#define F_IMPTOTDOCS 104
#define F_NUMEROS 105
#define F_FISCIVAPAESES 106
#define F_FISCIVACODS 107
#define F_CODFISCALES 108
#define F_TIPOPROTS 109
#define F_PROGRESSS 110
#endif

View File

@ -3,6 +3,8 @@
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
ENDPAGE
PAGE "Testata" -1 -1 77 20
@ -594,6 +596,19 @@ BEGIN
DRIVENBY F_VALUTAINTRA
END
STRING F_PROTFPPRO 18
BEGIN
PROMPT 1 17 "Codice Protocollo FPPRO "
FLAGS "D"
END
STRING F_PROKEY 80
BEGIN
PROMPT 1 18 "db key"
HELP "Chiave database"
FLAGS "H"
END
BOOLEAN F_RITFATT
BEGIN
PROMPT 1 21 "Fattura in ritardo "
@ -776,3 +791,5 @@ ENDMASK
#include "cg21iva.uml"
#include "cg21cg.uml"
#include "cg21rata.uml"
ENDMASK

View File

@ -19,6 +19,7 @@
#include <pconti.h>
#include <doc.h>
#include <occas.h>
#include "../fp/fplib.h"
///////////////////////////////////////////////////////////
// Funzioni di decodifica/calcolo
@ -2987,6 +2988,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
const bool ic = ixc->active() && (alleg < 5 || alleg == 7) && paiv.full() && !m.get_bool(F_LIQDIFF);
ixc->set(ic ? "X" : "");
}
fppro_mask(f, key);
}
}
@ -3449,6 +3451,30 @@ bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key)
return ok;
}
void TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
{
TMask& cg_msk = f.mask();
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!(fexist("fp0.exe") && !fp_settings().get_db_indirizzo().empty() && !fp_settings().is_f8()))
return;
TMask* msk = new TMask("cgFPPRO");
msk->set_handler(DLG_CONFIG, fppro_handler);
msk->set_handler(DLG_LINK, fppro_ok_handler);
msk->set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
msk->set(F_COFIS, cg_msk.get(F_COFI));
msk->set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
msk->set(F_PIVAS, cg_msk.get(F_PIVA));
msk->run();
// Riporto dati FPPRO su maschera Prima Nota
cg_msk.set(F_NUMDOCEXT, msk->get(F_NUMEROI));
cg_msk.set(F_NUMDOC, TString(msk->get(F_NUMEROI)).left(7));
cg_msk.set(F_DATADOC, msk->get(F_DATAI));
cg_msk.set(F_TOTALE, msk->get(F_TOTDOCI));
cg_msk.set(F_PROTFPPRO, msk->get(F_PROTFPPROI));
cg_msk.set(F_PROKEY, msk->get(F_FPPROKEYSI));
}
// Handler of the F_RITFIS
// Certified 100%
@ -3823,3 +3849,113 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
}
return true;
}
bool TPrimanota_application::fppro_handler(TMask_field& f, KEY k)
{
if (k != 32)
return true;
TMask& msk = f.mask();
//if(msk.curr_page() != 3)
//return true;
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!fexist("fp0.exe") || fp_settings().get_db_indirizzo().empty() || fp_settings().is_f8())
return true; // Salto il salvataggio in FPPRO
const int forn = msk.get_int(F_CODCLIFORS);
if (forn == 0)
{
message_box("Inserire prima il fornitore");
return true;
}
const TString& codfisc = msk.get(F_COFIS);
const TString& stato_piva = msk.get(F_STATOPAIVS);
const TString& piva = msk.get(F_PIVAS);
TString id_fornitore;
if (!piva.empty())
{
id_fornitore << " (P2_FISCIVAPAESE = ";
if (!stato_piva.empty())
id_fornitore << "\'" << stato_piva << "\'";
else
id_fornitore << "\'IT\'";
id_fornitore << " AND P2_FISCIVACOD = \'" << piva << "\'";
}
if (!codfisc.empty())
{
if (!id_fornitore.empty())
id_fornitore << " OR ";
id_fornitore << " P2_CODFISCALE = \'" << codfisc << "\'";
}
if (!id_fornitore.empty())
id_fornitore << ")";
TString query;
query << "SELECT PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
"FROM PAA0200F\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"JOIN PAA0100F\n" << " ON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
"JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
"WHERE " << id_fornitore << ";";
fp_db().sq_set_exec(query, false);
TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
sf.hide();
while (fp_db().sq_next())
{
TString numreg = fp_db().sq_get("PZ_NUMREGCONT");
if (numreg != "0")
continue;
TToken_string& row = sf.row(-1);
row.add("", 0);
row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
row.add(fp_db().sq_get("PZ_NUMERO"));
row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
row.add(fp_db().sq_get("P2_FISCIVACOD"));
row.add(fp_db().sq_get("P2_CODFISCALE"));
row.add(fp_db().sq_get("PZ_TIPOPROT"));
row.add(fp_db().sq_get("PZ_NUMPROT"));
}
sf.force_update();
sf.show();
return true;
}
bool TPrimanota_application::fppro_ok_handler(TMask_field& f, KEY k)
{
if (k != 32)
return true;
TMask& msk = f.mask();
//if (msk.curr_page() != 3)
//return true;
bool ok = false;
TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
bool loaded = false;
FOR_EACH_SHEET_ROW(sf, nr, row)
{
if(!loaded && *row->get(0) == 'X')
{
msk.set(F_NUMEROI, row->get(4));
msk.set(F_DATAI, row->get(1));
msk.set(F_TOTDOCI, row->get(3));
TString protocollo; protocollo << TDate(row->get(1)).year() << "-" << row->get(8) << "/" << row->get(9);
msk.set(F_PROTFPPROI, protocollo);
TString key_prot; key_prot << fp_db().sq_get("PZ_KEYPRGINVIO") << ";" << fp_db().sq_get("PZ_KEYHEADERFATT") << ";" << fp_db().sq_get("PZ_KEYBODYFATT");
msk.set(F_FPPROKEYSI, key_prot);
loaded = true;
ok = true;
break;
}
if(*row->get(0) == 'X')
row->add("", 0);
}
sf.force_update();
if(ok)
message_box("Dati caricati.\nChiudere la maschera per tornare alla prima nota.");
else
message_box("Nessun documento selezionato.");
//msk.stop_run(20334);
return true;
}

View File

@ -110,6 +110,7 @@ class TPrimanota_application : public TRelation_application
static bool annorif_handler(TMask_field& f, KEY key);
static bool numrif_handler(TMask_field& f, KEY key);
static bool protiva_handler(TMask_field& f, KEY key);
static bool clifo_handler(TMask_field& f, KEY key);
static bool totdoc_handler(TMask_field& f, KEY key);
static bool totdocval_handler(TMask_field& f, KEY key);
@ -167,6 +168,10 @@ class TPrimanota_application : public TRelation_application
static bool colors_handler(TMask_field& f, KEY k);
static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS
static bool fppro_handler(TMask_field& f, KEY k); // Carica spread fppro
static bool fppro_ok_handler(TMask_field& f, KEY k); // Riporta doc FPPRO in testata
static void fppro_mask(TMask_field& f, KEY key);
void reset_sheet_row(TSheet_field& s, int n);
int crea_somma_spese(TImporto& imp);
@ -182,6 +187,8 @@ protected: // TApplication
virtual void ini2mask(TConfig& ini, TMask& msk, bool query);
virtual void mask2ini(const TMask& msk, TConfig& ini);
bool save_fppro() const;
// Salva riferimento documento in FPPRO in mov
bool save_dbmov() const;
virtual bool save(bool check_dirty);
bool get_mask_swap_file(TFilename& name) const;

184
src/cg/cgFPPRO.uml Normal file
View File

@ -0,0 +1,184 @@
#include "cg2100.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_CONFIG 2 2
BEGIN
PROMPT 3 1 "Carica FPPRO"
PICTURE TOOL_ELABORA
END
BUTTON DLG_LINK 2 2
BEGIN
PROMPT 3 1 "Collega FPPRO"
PICTURE TOOL_LINK
END
BUTTON DLG_QUIT 2 2
BEGIN
PROMPT 4 1 "Fine"
PICTURE TOOL_QUIT
END
ENDPAGE
PAGE "FPPRO" -1 -1 77 20
NUMBER F_CODCLIFORS 6
BEGIN
PROMPT 1 1 "Codice fornitore"
FLAGS "D"
END
STRING F_COFIS 16
BEGIN
PROMPT 40 1 "C.F. "
FLAGS "D"
END
STRING F_STATOPAIVS 2
BEGIN
PROMPT 1 2 "STATO P.I."
FLAGS "D"
END
STRING F_PIVAS 12
BEGIN
PROMPT 40 2 "P.I. "
FLAGS "D"
END
SPREADSHEET F_SHEETFPPROS 0 5
BEGIN
PROMPT 0 4 ""
ITEM "SEL"
ITEM "DATA"
ITEM "DATAORARIC"
ITEM "IMPTOTDOCP"
ITEM "NUMERO"
ITEM "FISCIVAPAESE"
ITEM "FISCIVACOD"
ITEM "CODFISCALE"
ITEM "TIPOPROT"
ITEM "PROGRESS"
END
STRING F_NUMEROI 20
BEGIN
PROMPT 1 20 "NUMERO"
FLAGS "H"
END
DATE F_DATAI
BEGIN
PROMPT 1 21 "DATA"
FLAGS "H"
END
NUMBER F_TOTDOCI 10 3
BEGIN
PROMPT 1 22 "IMPTOTDOC"
FLAGS "H"
END
STRING F_PROTFPPROI 18
BEGIN
PROMPT 1 23 "Tipo Protocollo"
FLAGS "H"
END
STRING F_FPPROKEYSI 80
BEGIN
PROMPT 1 19 "db key"
HELP "Chiave database"
FLAGS "H"
END
ENDPAGE
ENDMASK
PAGE "ELEMENTI SPREADSHEET" -1 -1 77 20
BOOLEAN F_SELFPPROS
BEGIN
PROMPT 1 0 "Selected"
FLAGS ""
END
DATE F_DATAS
BEGIN
PROMPT 1 1 "DATA"
FLAGS "D"
END
DATE F_DATAORARICS
BEGIN
PROMPT 1 2 "DATAORARIC"
FLAGS "D"
END
NUMBER F_IMPTOTDOCS 10 3
BEGIN
PROMPT 1 3 "IMPTOTDOC"
FLAGS "D"
END
STRING F_NUMEROS 20
BEGIN
PROMPT 1 4 "NUMERO"
FLAGS "D"
END
STRING F_FISCIVAPAESES 2
BEGIN
PROMPT 1 5 "FISCIVAPAESE"
FLAGS "D"
END
STRING F_FISCIVACODS 16
BEGIN
PROMPT 1 6 "FISCIVACOD"
FLAGS "D"
END
STRING F_CODFISCALES 16
BEGIN
PROMPT 1 7 "CODFISCALE"
FLAGS "D"
END
STRING F_TIPOPROTS 2
BEGIN
PROMPT 1 8 "TIPOPROT"
FLAGS "D"
END
NUMBER F_PROGRESSS 10 0
BEGIN
PROMPT 1 9 "PROGRESS"
FLAGS "D"
END
ENDPAGE
TOOLBAR "Documento" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
END
ENDPAGE
ENDMASK

View File

@ -56,6 +56,8 @@
#define MOV_CONTSEP "CONTSEP"
#define MOV_TNUMREG "TNUMREG"
#define MOV_IVALIQ "IVALIQ"
#define MOV_KEYFPPRO "KEYFPPRO"
#define MOV_PROGFPPRO "PROGFPPRO"
#define NUMREG_PROVVISORIO 999999L

View File

@ -9,8 +9,15 @@
const TDate SSimple_query::sq_get_date(const char * field)
{
const TDate app(_rec.get_date(field));
return app;
TDate date(_rec.get_date(field));
if(!date.ok() || date == 19000100)
{
TString dt_str = _rec.get(field);
if (dt_str.len() > 10)
dt_str = dt_str.left(10);
date = dt_str;
}
return date;
}
const real SSimple_query::sq_get_real(const char * field)