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:
parent
c3430ae494
commit
17c72490cf
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user