Patch level : 12.0 840

Files correlati     : fp0, fp0500a.msk
Commento            :
Aggiornamento programma personalizzazioni FP:
- Sistemata maschera
- Aggiunto AND e OR nella condizione
- Aggiunto preload con dati base durante la creazione di una personalizzazione
This commit is contained in:
Mattia Tollari 2019-06-25 11:51:35 +02:00
parent c3430ae494
commit 17c72490cf
4 changed files with 120 additions and 31 deletions

View File

@ -74,6 +74,9 @@ class TFpcust : public TRelation_application
TRelation* _rel{ nullptr };
TFP_custom* _fpcust{ nullptr };
private:
void init_insert_mode(TMask& m) override;
protected:
int read(TMask& m) override;
int write(const TMask& m) override;
@ -92,6 +95,27 @@ public:
TRelation* get_relation() const override { return static_cast<TRelation*>(_rel); }
};
void TFpcust::init_insert_mode(TMask& m)
{
// Presetto delle righe di default
// Causale
TToken_string& row_causale = m.sfield(F_CAUSALI).row(-1);
row_causale.add("READ(%TIP, S0)");
// Articoli
TToken_string& row_articolo_interno = m.sfield(F_ARTICOLI).row(-1);
row_articolo_interno.add("Codice articolo interno");
row_articolo_interno.add("READ(34, CODARTMAG)");
row_articolo_interno.add("READ(34, CODARTMAG) != \"\" && READ(34, CODART) != \"\"");
TToken_string& row_articolo = m.sfield(F_ARTICOLI).row(-1);
row_articolo.add("Codice articolo cliente");
row_articolo.add("READ(34, CODART)");
row_articolo.add("READ(34, CODARTMAG) != READ(34, CODART) && READ(34, CODART) != \"\"");
}
int TFpcust::read(TMask& m)
{
TRelation_application::read(m);
@ -105,6 +129,7 @@ int TFpcust::read(TMask& m)
{
TToken_string& row = sheet_causali.row(-1);
row.add(rcaus->get(FPCCAUS_VALORE), xvtil_cid2index(S_CAUS_VALORE));
row.add(rcaus->get(FPCCAUS_COND), xvtil_cid2index(S_CAUS_COND));
}
TSheet_field& sheet_articoli = m.sfield(F_ARTICOLI);
@ -114,6 +139,7 @@ int TFpcust::read(TMask& m)
TToken_string& row = sheet_articoli.row(-1);
row.add(rart->get(FPCART_TIPO), xvtil_cid2index(S_ART_TIPO));
row.add(rart->get(FPCART_VALORE), xvtil_cid2index(S_ART_VALORE));
row.add(rart->get(FPCART_COND), xvtil_cid2index(S_ART_COND));
}
TSheet_field& sheet_adg = m.sfield(F_ADG);
@ -124,7 +150,11 @@ int TFpcust::read(TMask& m)
row.add(radg->get(FPCADG_TIPODATO), xvtil_cid2index(S_ADG_TIPODATO));
row.add(radg->get(FPCADG_RTESTO), xvtil_cid2index(S_ADG_RTESTO));
row.add(radg->get(FPCADG_RNUMERO), xvtil_cid2index(S_ADG_RNUMERO));
row.add(radg->get(FPCADG_RDATA), xvtil_cid2index(S_ADG_RDATA));
row.add(radg->get_date(FPCADG_RDATA), xvtil_cid2index(S_ADG_RDATA));
row.add(radg->get(FPCADG_TIPORIGA), xvtil_cid2index(S_ADG_TIPORIGA));
row.add(radg->get(FPCADG_COND), xvtil_cid2index(S_ADG_COND));
row.add(radg->get(FPCADG_SPLIT), xvtil_cid2index(S_ADG_SPLIT));
}
return NOERR;

View File

@ -40,10 +40,15 @@ BEGIN
FIELD GLOBAL
END
SPREADSHEET F_CAUSALI 0 6
TEXT DLG_NULL
BEGIN
PROMPT 1 3 "Causale"
ITEM "Valore@50"
PROMPT 1 3 "@bCausale documento"
END
SPREADSHEET F_CAUSALI 0 15
BEGIN
PROMPT 1 4 "Causale"
ITEM "2.1.1.11 Valore@50"
ITEM "Condizione@50"
END
@ -51,21 +56,31 @@ ENDPAGE
PAGE "Pag. 2" 0 2 0 0
SPREADSHEET F_ARTICOLI 0 6
TEXT DLG_NULL
BEGIN
PROMPT 1 1 "Codice Articolo"
ITEM "Tipo@35"
ITEM "Valore@35"
PROMPT 1 0 "@bArticoli"
END
SPREADSHEET F_ARTICOLI 0 10
BEGIN
PROMPT 0 1 ""
ITEM "2.2.1.3.1 Tipo@35"
ITEM "2.2.1.3.2 Valore@35"
ITEM "Condizione@35"
END
SPREADSHEET F_ADG 0 6
TEXT DLG_NULL
BEGIN
PROMPT 0 10 "Altri dati gestionali"
ITEM "Tipo Dato@35"
ITEM "Riferimento\nTesto@35"
ITEM "Riferimento\nNumero@35"
ITEM "Riferimento\nData@35"
PROMPT 1 11 "@bAltri dati gestionali"
END
SPREADSHEET F_ADG 0 10
BEGIN
PROMPT 0 12 ""
ITEM "2.2.1.16.1 Tipo Dato@35"
ITEM "2.2.1.16.2 Riferimento\nTesto@35"
ITEM "2.2.1.16.3 Riferimento\nNumero@35"
ITEM "2.2.1.16.4 Riferimento\nData@35"
ITEM "Tipo riga@8"
ITEM "Condizione@35"
ITEM "Riga\nseparata@8"
@ -74,7 +89,7 @@ END
ENDPAGE
ENDMASK
PAGE "Riga Causale" -1 -1 60 12
PAGE "Riga Causale" -1 -1 65 5
STRING S_CAUS_VALORE 250 50
BEGIN
@ -84,7 +99,7 @@ END
STRING S_CAUS_COND 200 50
BEGIN
PROMPT 1 2 "Condizione "
PROMPT 1 2 "Cond "
HELP "Condizione che se è vera abilita la riga"
END
@ -94,18 +109,23 @@ TOOLBAR "Riga" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Conferma"
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 1 1 "~Elimina"
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Cancella"
END
ENDPAGE
ENDMASK
PAGE "Riga Articolo" -1 -1 60 12
PAGE "Riga Articolo" -1 -1 70 5
STRING S_ART_TIPO 200 50
BEGIN
@ -115,13 +135,13 @@ END
STRING S_ART_VALORE 200 50
BEGIN
PROMPT 1 1 "Valore "
PROMPT 1 2 "Valore "
HELP "Tag ValoreArticolo"
END
STRING S_ART_COND 200 50
BEGIN
PROMPT 1 2 "Condizione "
PROMPT 1 3 "Cond "
HELP "Condizione che se è vera abilita la riga"
END
@ -131,18 +151,23 @@ TOOLBAR "Riga" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Conferma"
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 1 1 "~Elimina"
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Cancella"
END
ENDPAGE
ENDMASK
PAGE "Riga Altri Dati Gestionali" -1 -1 60 12
PAGE "Riga Altri Dati Gestionali" -1 -1 70 12
STRING S_ADG_TIPODATO 200 50
BEGIN
@ -170,7 +195,7 @@ END
STRING S_ADG_TIPORIGA 4
BEGIN
PROMPT 1 2 "Tipo riga "
PROMPT 1 5 "Tipo riga "
USE %TRI
INPUT CODTAB S_ADG_TIPORIGA
DISPLAY "Tipo riga@8" CODTAB
@ -181,13 +206,13 @@ END
STRING S_ADG_COND 200 50
BEGIN
PROMPT 1 2 "Condizione "
PROMPT 1 6 "Cond "
HELP "Condizione che se è vera abilita la riga"
END
BOOLEAN S_ADG_SPLIT
BEGIN
PROMPT 1 2 "Riga separata"
PROMPT 20 5 "Riga separata"
HELP "Separa questa informazione in una riga separata"
END
@ -197,12 +222,17 @@ TOOLBAR "Riga" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Conferma"
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 1 1 "~Elimina"
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
PROMPT 1 1 "~Cancella"
END
ENDPAGE

View File

@ -386,7 +386,7 @@ inline TFP_custom_cache& cached_custom_fp()
class TFP_expression : public TObject
{
private:
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq };
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
// Etrattori
static void extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string* search);

View File

@ -326,6 +326,18 @@ bool TFP_expression::check_condition(const TString& cond, TRiga_documento& rdoc)
TFP_operator symb;
split_condition(cond, cond_sx, cond_dx, symb);
// Se ho davanti un and o un or evito di fare i passaggi dopo perchè sono inutili
// Così facendo posso anche concatenare più and o or, sarebbe carino aggiungere anche il supporto alle parentesi
if(symb == and)
{
return check_condition(cond_sx, rdoc) && check_condition(cond_dx, rdoc);
}
if(symb == or)
{
return check_condition(cond_sx, rdoc) || check_condition(cond_dx, rdoc);
}
// Altrimenti proseguo per la mia solita strada
const TVariant value_sx = parse_expression(cond_sx, rdoc);
const TVariant value_dx = parse_expression(cond_dx, rdoc);
@ -412,6 +424,16 @@ void TFP_expression::split_condition(const TString& cond, TString& cond_sx, TStr
symb = ls;
symbol = " < ";
}
else if (cond.contains(" && "))
{
symb = and;
symbol = " && ";
}
else if (cond.contains(" || "))
{
symb = or;
symbol = " || ";
}
if(symb != error)
{
@ -523,6 +545,13 @@ TVariant& TFP_expression::parse_read(const TString& str, TRiga_documento& rdoc)
TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo, TRiga_documento& rdoc)
{
// Prima di tutto controllo se è una delle tabelle multitracciato che supporto
if(tabella == "%TIP")
{
return get_value(rdoc.doc().tipo(), campo);
}
int file;
calc_table(tabella, file);