f_cmpl_with_parms.srf 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. $PBExportHeader$f_cmpl_with_parms.srf
  2. global type f_cmpl_with_parms from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_cmpl_with_parms (string arg_formula, s_cmpl_parm arg_cmpl, ref decimal arg_qty, ref string arg_msg)
  6. end prototypes
  7. global function integer f_cmpl_with_parms (string arg_formula, s_cmpl_parm arg_cmpl, ref decimal arg_qty, ref string arg_msg);Int rslt = 1
  8. datastore ds_cmp
  9. Decimal ls_number
  10. String ls_exp
  11. String ls_rs
  12. Decimal ld_temp
  13. string ls_temp
  14. ls_exp = arg_formula
  15. IF ls_exp = '' THEN GOTO ext
  16. ds_cmp = CREATE datastore
  17. ds_cmp.DataObject = "ds_cmp_qty"
  18. ds_cmp.SetTransObject(sqlca)
  19. ds_cmp.Retrieve()
  20. ds_cmp.InsertRow(0)
  21. long i
  22. for i = 1 to upperbound(arg_cmpl.parmname)
  23. f_str_replace(ls_exp, '['+arg_cmpl.parmname[i]+']', string(arg_cmpl.parmvalue[i]))
  24. next
  25. ls_rs = ds_cmp.Modify("cmp.Expression='"+ ls_exp+"'")
  26. IF ls_rs = '' THEN
  27. ds_cmp.AcceptText()
  28. ls_number = ds_cmp.Object.cmp[ds_cmp.GetRow()]
  29. ELSE
  30. rslt = 0
  31. arg_msg = '非法格式,不能计算!'+ls_exp
  32. GOTO ext
  33. END IF
  34. arg_qty = ls_number
  35. ext:
  36. RETURN rslt
  37. end function