$PBExportHeader$uo_amerce.sru forward global type uo_amerce from nonvisualobject end type end forward global type uo_amerce from nonvisualobject end type global uo_amerce uo_amerce type variables PUBLIC PROTECTEDWRITE Long scid PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE String billcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep PUBLIC PROTECTEDWRITE Int affirmflag Long sptid DateTime billdate Decimal amerceamt String amercereason String relcode Long payid Long banktypeid String inrep long moneyid decimal mrate string dscrp Long deptid int uo_option_m_mstpay private: s_amercemx smx[] Long it_MXBT = 0 //明细结构数组末指针 Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE//修改标志 end variables forward prototypes public function integer p_reset () public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer del (long arg_scid, long arg_billid, ref string arg_msg) public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer p_clearmx () public function integer acceptmx (long arg_printid, long arg_mtrlid, decimal arg_fprice, decimal arg_rebate, decimal arg_qty, string arg_unit, integer arg_admtrlid, string arg_mxdscrp, long arg_taskid, long arg_relprintid, string arg_taskcode, datetime arg_requiredate, datetime arg_accomplishdate, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 billid=0 billcode='' opemp='' auditingrep='' flag=0 sptid=0 amerceamt=0 amercereason='' relcode='' moneyid = 0 mrate = 0 dscrp = '' //清除明细 P_CLEARMX() it_newbegin=FALSE it_updatebegin=FALSE RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: save(arg_msg,arg_ifcommit) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(sptid) THEN sptid = 0 IF IsNull(amerceamt) THEN amerceamt = 0 IF IsNull(banktypeid) THEN banktypeid = 0 IF IsNull(amercereason) THEN amercereason = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(inrep) THEN inrep = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(mrate) THEN mrate = 0 IF IsNull(deptid) THEN deptid = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt Where sptid = :sptid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询供应商资料失败' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '供应商资料重复' rslt = 0 GOTO ext END IF IF amerceamt = 0 THEN arg_msg = '请输入正确的罚款金额' rslt = 0 GOTO ext END IF IF inrep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF banktypeid = 0 THEN arg_msg = '请请选择结算方式' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :moneyid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询币种失败' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '币种资料不存在' rslt = 0 GOTO ext END IF IF mrate = 0 THEN arg_msg = '币种汇率错误' rslt = 0 GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF f_check_inoutdate(0,billdate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_spt_amerce","billid",arg_msg,True,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF billcode = getid(scid,ls_sccode + "KK",Date(server_dt),True,sqlca) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取罚款单编号" GOTO ext END IF INSERT INTO u_spt_amerce ( scid, billid, billcode, billdate, sptid, amerceamt, banktypeid, inrep, amercereason, relcode, opdate, opemp, moneyid, mrate, dscrp, deptid) VALUES ( :scid, :ls_newid, :billcode, :billdate, :sptid, :amerceamt, :banktypeid, :inrep, :amercereason, :relcode, :server_dt, :publ_operator, :moneyid, :mrate, :dscrp, :deptid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入操作失败>>"+"~n"+sqlca.SQLErrText GOTO ext END IF billid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_spt_amerce SET billdate = :billdate, sptid = :sptid, amerceamt = :amerceamt, amercereason = :amercereason, banktypeid = :banktypeid, inrep = :inrep, relcode = :relcode, moddate = :server_dt, modemp = :publ_operator, moneyid = :moneyid, mrate = :mrate, dscrp = :dscrp, deptid = :deptid WHERE u_spt_amerce.billid = :billid AND u_spt_amerce.scid = :scid And u_spt_amerce.flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_spt_amercemx WHERE billid = :billid And scid = :scid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_MXBT INSERT INTO u_spt_amercemx(scid, billid, printid, Qty, fprice, rebate, amt, mxdscrp, taskcode, taskid, relprintid, MtrlID, admtrlid, unit, accomplishdate, requiredate, ctmint) VALUES (:scid, :billid, :smx[i].printid, :smx[i].Qty, :smx[i].fprice, :smx[i].rebate, :smx[i].amt, :smx[i].mxdscrp, :smx[i].taskcode, :smx[i].taskid, :smx[i].relprintid, :smx[i].MtrlID, :smx[i].admtrlid, :smx[i].unit, :smx[i].accomplishdate, :smx[i].requiredate, 0 ); IF sqlca.SQLCode <> 0 THEN if it_newbegin then billid = 0 rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_clearmx() ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: updatebegin(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF billid = arg_billid scid = arg_scid p_clearmx() //清除明细 it_newbegin = False it_updatebegin = True ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer newbegin (long arg_scid, ref string arg_msg);Int rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF p_reset() scid = arg_scid it_newbegin = True it_updatebegin = False ext: if rslt = 0 then p_reset() RETURN rslt end function public function integer del (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: del(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行,操作取消" GOTO ext END IF SELECT u_spt_amerce.flag INTO :flag FROM u_spt_amerce Where u_spt_amerce.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据操作失败' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_spt_amerce WHERE u_spt_amerce.billid = :arg_billid And u_spt_amerce.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除罚款单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 1 THEN COMMIT; ELSEIF rslt = 0 THEN ROLLBACK; END IF p_reset() Return (rslt) end function public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);//0 失败 1成功 Int rslt = 1,I = 1,NO_MXCHECK = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误采购订单唯一码' GOTO ext END IF IF p_getinfo(arg_scid, arg_billid, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE CUR_INWAERMX CURSOR FOR SELECT u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_spt_amercemx.Qty, u_spt_amercemx.fprice, u_spt_amercemx.rebate, u_spt_amercemx.amt, u_spt_amercemx.unit, u_spt_amercemx.admtrlid, u_spt_amercemx.mxdscrp, u_spt_amercemx.taskcode, u_spt_amercemx.billid, u_spt_amercemx.taskid, u_spt_amercemx.printid, u_spt_amercemx.relprintid, u_spt_amercemx.MtrlID, u_spt_amercemx.accomplishdate, u_spt_amercemx.requiredate FROM u_spt_amercemx INNER JOIN u_mtrldef ON u_spt_amercemx.MtrlID = u_mtrldef.mtrlid where u_spt_amercemx.billid=:arg_billid USING sqlca; OPEN CUR_INWAERMX; FETCH CUR_INWAERMX INTO :smx[i].mtrlcode, :smx[i].mtrlname, :smx[i].Qty, :smx[i].fprice, :smx[i].rebate, :smx[i].amt, :smx[i].unit, :smx[i].admtrlid, :smx[i].mxdscrp, :smx[i].taskcode, :smx[i].billid, :smx[i].taskid, :smx[i].printid, :smx[i].relprintid, :smx[i].MtrlID, :smx[i].accomplishdate, :smx[i].requiredate; DO WHILE sqlca.SQLCode = 0 I++ FETCH CUR_INWAERMX INTO :smx[i].mtrlcode, :smx[i].mtrlname, :smx[i].Qty, :smx[i].fprice, :smx[i].rebate, :smx[i].amt, :smx[i].unit, :smx[i].admtrlid, :smx[i].mxdscrp, :smx[i].taskcode, :smx[i].billid, :smx[i].taskid, :smx[i].printid, :smx[i].relprintid, :smx[i].MtrlID, :smx[i].accomplishdate, :smx[i].requiredate; LOOP CLOSE CUR_INWAERMX; //检验明细是否读入完整 SELECT COUNT(*) INTO :NO_MXCHECK FROM u_spt_amercemx Where u_spt_amercemx.billid = :arg_billid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,质量事故赔偿单明细数量" GOTO ext END IF IF i <> (NO_MXCHECK+1) THEN rslt = 0 arg_msg = "查询操作失败,质量事故赔偿单单明细" GOTO ext END IF it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN billid = 0 arg_msg = '错误的单据id' GOTO ext END IF SELECT u_spt_amerce.billcode, u_spt_amerce.billdate, u_spt_amerce.sptid, u_spt_amerce.amerceamt, u_spt_amerce.banktypeid, u_spt_amerce.inrep, u_spt_amerce.amercereason, u_spt_amerce.payid, u_spt_amerce.relcode, u_spt_amerce.flag, u_spt_amerce.affirmflag, u_spt_amerce.moneyid, u_spt_amerce.mrate INTO :billcode, :billdate, :sptid, :amerceamt, :banktypeid, :inrep, :amercereason, :payid, :relcode, :flag, :affirmflag, :moneyid, :mrate FROM u_spt_amerce WHERE u_spt_amerce.billid = :arg_billid And u_spt_amerce.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询数据操作失败,罚款单'+sqlca.SQLErrText GOTO ext END IF scid = arg_scid billid = arg_billid ext: //IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_dscrp Long ll_moneyid_native Decimal ld_mstpayamt Long ll_moneyid IF uo_option_m_mstpay = -1000 THEN rslt = 0 arg_msg = '选项:[241]系统使用多币种应付帐,读取初始默认值失败,操作取消!' GOTO ext END IF uo_mustpay uo_pay uo_pay = Create uo_mustpay IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审核' GOTO ext END IF UPDATE u_spt_amerce SET auditrep = :publ_operator, auditdate = getdate(), flag = 1 WHERE u_spt_amerce.billid = :arg_billid AND flag = 0 And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF amerceamt <> 0 THEN Long ll_dft_itemid SELECT itemid INTO :ll_dft_itemid FROM u_itemdef Where dfttype = 7; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询默认供应商赔偿单项目资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF IF uo_option_m_mstpay = 0 THEN ld_mstpayamt = amerceamt * mrate ll_moneyid = ll_moneyid_native ELSE ld_mstpayamt = amerceamt ll_moneyid = moneyid END IF ls_dscrp = billcode + "罚款" DateTime plandate SetNull(plandate) s_bmstpay s_pay s_pay.scid = scid s_pay.sptid = sptid s_pay.paydate = billdate s_pay.inrep = inrep s_pay.oriamt = 0 - ld_mstpayamt s_pay.mstpayamt = 0 - ld_mstpayamt s_pay.payamt = 0 s_pay.payamt_cn = 0 s_pay.dscrp = ls_dscrp s_pay.billcode = billcode s_pay.relcode = relcode s_pay.banktypeid = banktypeid s_pay.viewdate = plandate s_pay.opemp = publ_operator s_pay.buildtype = 1 s_pay.inwareid = billid s_pay.accountsid = 0 s_pay.itemid = ll_dft_itemid s_pay.moneyid = ll_moneyid s_pay.moneyid_cn = ll_moneyid IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_spt_amerce SET payid = :uo_pay.ref_payid WHERE u_spt_amerce.billid = :arg_billid AND scid = :scid And flag = 1 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新罚款单相关应付帐ID失败' rslt = 0 GOTO ext END IF END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_pay RETURN rslt end function public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) uo_mustpay uo_pay uo_pay = CREATE uo_mustpay IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据还未审核,不可以撤审' GOTO ext END IF IF affirmflag = 1 THEN rslt = 0 arg_msg = '单据财务审核,不可以撤审' GOTO ext END IF UPDATE u_spt_amerce SET auditrep = '', auditdate = :null_dt, flag = 0 WHERE u_spt_amerce.billid = :arg_billid AND flag = 1 and affirmflag = 0 AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF amerceamt <> 0 THEN IF uo_pay.del_payrec(scid,1,payid,sptid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF flag = 0 ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_pay RETURN rslt end function public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt = 0 arg_msg = "编辑状态下不可用" GOTO ext END IF IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = getinfo(arg_scid,arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_spt_amerce SET amercereason = amercereason+' '+:arg_newdescppart WHERE u_spt_amerce.billid = :arg_billid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ROLLBACK ; rslt = 0 arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF COMMIT ; amercereason = amercereason+' '+arg_newdescppart ext: Return (rslt) end function public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据还未审核,不可以财务审核' GOTO ext END IF IF affirmflag = 1 THEN rslt = 0 arg_msg = '单据已财务审核,不可以财务审核' GOTO ext END IF UPDATE u_spt_amerce SET affirmemp = :publ_operator, affirmdate = getdate(), affirmflag = 1 WHERE u_spt_amerce.billid = :arg_billid AND flag = 1 AND affirmflag = 0 AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF affirmflag = 1 ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF affirmflag = 0 THEN rslt = 0 arg_msg = '单据未财务审核,不可以撤审' GOTO ext END IF UPDATE u_spt_amerce SET affirmemp = '', affirmdate = :null_dt, affirmflag = 0 WHERE u_spt_amerce.billid = :arg_billid AND flag = 1 and affirmflag = 1 AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF affirmflag = 0 ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer acceptmx (long arg_printid, long arg_mtrlid, decimal arg_fprice, decimal arg_rebate, decimal arg_qty, string arg_unit, integer arg_admtrlid, string arg_mxdscrp, long arg_taskid, long arg_relprintid, string arg_taskcode, datetime arg_requiredate, datetime arg_accomplishdate, ref string arg_msg);Int rslt = 1 IF arg_qty = 0 Or arg_mtrlid = 0 THEN GOTO ext END IF it_MXBT++ smx[it_MXBT].printid = arg_printid smx[it_MXBT].fprice = arg_fprice smx[it_MXBT].rebate = arg_rebate smx[it_MXBT].Qty = arg_qty smx[it_MXBT].amt = Round(arg_fprice*arg_rebate*arg_qty,2) smx[it_MXBT].mxdscrp = arg_mxdscrp smx[it_MXBT].taskcode = arg_taskcode smx[it_MXBT].taskid = arg_taskid smx[it_MXBT].relprintid = arg_relprintid smx[it_MXBT].MtrlID = arg_mtrlid smx[it_MXBT].admtrlid = arg_admtrlid smx[it_MXBT].unit = arg_unit smx[it_MXBT].accomplishdate = arg_accomplishdate smx[it_MXBT].requiredate = arg_requiredate ext: IF rslt = 0 THEN p_clearmx() RETURN rslt end function on uo_amerce.create call super::create TriggerEvent( this, "constructor" ) end on on uo_amerce.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('241',str_optionvalue,arg_msg) uo_option_m_mstpay = Long(str_optionvalue) end event