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 }; TRelation* _rel{ nullptr };
TFP_custom* _fpcust{ nullptr }; TFP_custom* _fpcust{ nullptr };
private:
void init_insert_mode(TMask& m) override;
protected: protected:
int read(TMask& m) override; int read(TMask& m) override;
int write(const TMask& m) override; int write(const TMask& m) override;
@ -92,6 +95,27 @@ public:
TRelation* get_relation() const override { return static_cast<TRelation*>(_rel); } 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) int TFpcust::read(TMask& m)
{ {
TRelation_application::read(m); TRelation_application::read(m);
@ -105,6 +129,7 @@ int TFpcust::read(TMask& m)
{ {
TToken_string& row = sheet_causali.row(-1); TToken_string& row = sheet_causali.row(-1);
row.add(rcaus->get(FPCCAUS_VALORE), xvtil_cid2index(S_CAUS_VALORE)); 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); TSheet_field& sheet_articoli = m.sfield(F_ARTICOLI);
@ -114,6 +139,7 @@ int TFpcust::read(TMask& m)
TToken_string& row = sheet_articoli.row(-1); TToken_string& row = sheet_articoli.row(-1);
row.add(rart->get(FPCART_TIPO), xvtil_cid2index(S_ART_TIPO)); 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_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); 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_TIPODATO), xvtil_cid2index(S_ADG_TIPODATO));
row.add(radg->get(FPCADG_RTESTO), xvtil_cid2index(S_ADG_RTESTO)); 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_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; return NOERR;

View File

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

View File

@ -386,7 +386,7 @@ inline TFP_custom_cache& cached_custom_fp()
class TFP_expression : public TObject class TFP_expression : public TObject
{ {
private: private:
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq }; enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
// Etrattori // Etrattori
static void extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string* search); 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; TFP_operator symb;
split_condition(cond, cond_sx, cond_dx, 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_sx = parse_expression(cond_sx, rdoc);
const TVariant value_dx = parse_expression(cond_dx, 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; symb = ls;
symbol = " < "; symbol = " < ";
} }
else if (cond.contains(" && "))
{
symb = and;
symbol = " && ";
}
else if (cond.contains(" || "))
{
symb = or;
symbol = " || ";
}
if(symb != error) 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) 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; int file;
calc_table(tabella, file); calc_table(tabella, file);