diff --git a/src/ve/velib03a.cpp b/src/ve/velib03a.cpp index aac40efef..5ae72b15b 100755 --- a/src/ve/velib03a.cpp +++ b/src/ve/velib03a.cpp @@ -615,9 +615,9 @@ int TExpr_documento::parse_user_func(const char * name, int nparms) const if (strcmp(name, "NRATE") == 0) return nparms == 0 ? _nrate : -1; if (strcmp(name, "QTACONAI") == 0) - return nparms >= 1 && nparms < 3 ? _qtaconai : -1; + return nparms >= 1 && nparms < 4 ? _qtaconai : -1; if (strcmp(name, "VALCONAI") == 0) - return nparms >= 1 && nparms < 3 ? _valconai : -1; + return nparms >= 1 && nparms < 4 ? _valconai : -1; return -1; } @@ -1068,12 +1068,11 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st break; case _qtaconai: { - int sp = stack.count(); - int tipo_calcolo = (nparms > 1) ? (int)stack.pop_real().integer() : 0; - TString cat = stack.pop_string(); + const int ndec = (nparms > 2) ? (int)stack.pop_real().integer() : 5; + const int tipo_calcolo = (nparms > 1) ? (int)stack.pop_real().integer() : 0; + const TString cat = stack.pop_string(); - if (stack.count() >= sp - 2) - stack.push(ZERO); + stack.push(ZERO); real & val = stack.peek_real(); @@ -1107,7 +1106,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st val *= (perc_esenz / CENTO); } - val.round(5); + val.round(ndec); } else val = ZERO; @@ -1115,13 +1114,12 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st break; case _valconai: { - int sp = stack.count(); - int tipo_calcolo = (nparms > 1) ? (int)stack.pop_real().integer() : 0; - TString cat = stack.pop_string(); + const int ndec = (nparms > 2) ? (int)stack.pop_real().integer() : 5; + const int tipo_calcolo = (nparms > 1) ? (int)stack.pop_real().integer() : 0; + const TString cat = stack.pop_string(); TString_array sottocat_found; - if (stack.count() >= sp - 2) - stack.push(ZERO); + stack.push(ZERO); real & val = stack.peek_real(); @@ -1135,7 +1133,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st { sottocat_found.add(sottocat); stack.push(sottocat); - stack.push(tipo_calcolo); + stack.push(tipo_calcolo); evaluate_user_func(_qtaconai, 2, stack, type); real valqta = stack.pop_real(); @@ -1155,7 +1153,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st const real prezzo = rdoc.get_real(RDOC_PREZZO); val = valqta * prezzo; - val.round(5); + val.round(ndec); break; }