$PBExportHeader$uo_rp.sru forward global type uo_rp from nonvisualobject end type type s_rp from structure within uo_rp end type end forward type s_rp from structure long printid string col1name0 decimal { 4 } col1name1 decimal { 4 } col1name2 string col2name0 decimal { 4 } col2name1 decimal { 4 } col2name2 end type global type uo_rp from nonvisualobject end type global uo_rp uo_rp type variables private: s_rp ss_rp[] public: Long it_MXBT = 0 Long billid=0 Long rpid=0 string billname='' datetime sdate datetime edate end variables forward prototypes public function integer save (ref string arg_msg) public subroutine p_reset () public function integer acceptmx (long arg_printid, string arg_col1name0, decimal arg_col1name1, decimal arg_col1name2, string arg_col2name0, decimal arg_col2name1, decimal arg_col2name2, ref string arg_msg) public function integer f_delete (long arg_billid, ref string arg_msg) end prototypes public function integer save (ref string arg_msg);Integer rslt = 1,cnt = 0,i,j,k DateTime server_dt Long ll_cpid,ll_ppid,ll_cusid,ll_crid,ll_billid String ls_sccode //////////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ll_billid = f_sys_scidentity(0,"u_sp_rp","billid",arG_MSG,True,sqlca) //数据commit事务) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF billid = ll_billid //更新客户id INSERT INTO u_sp_rp ( billid, rpid , billname, sdate, edate ) VALUES ( :billid, :rpid , :billname, :sdate, :edate ) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致插入单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF FOR j = 1 To it_mxbt INSERT INTO u_sp_rp_mx ( billid, printid, col1name0, col1name1, col1name2, Col2name0, Col2name1, Col2name2 ) VALUES ( :billid, :ss_rp[j].printid, :ss_rp[j].col1name0, :ss_rp[j].col1name1, :ss_rp[j].col1name2, :ss_rp[j].Col2name0, :ss_rp[j].Col2name1, :ss_rp[j].Col2name2 ) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致插入单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF NEXT ELSE //rpid<>0 UPDATE u_sp_rp SET billname = :billname, sdate = :sdate, edate = :edate WHERE u_sp_rp.billid = :billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致插入单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF DELETE From u_sp_rp_mx Where u_sp_rp_mx.billid = :billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致删除明细费用操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF FOR j = 1 To it_mxbt INSERT INTO u_sp_rp_mx ( billid, printid, col1name0, col1name1, col1name2, Col2name0, Col2name1, Col2name2 ) VALUES ( :billid, :ss_rp[j].printid, :ss_rp[j].col1name0, :ss_rp[j].col1name1, :ss_rp[j].col1name2, :ss_rp[j].Col2name0, :ss_rp[j].Col2name1, :ss_rp[j].Col2name2 ) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致插入单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF next END IF ext: IF rslt = 0 THEN p_reset() ROLLBACK Using sqlca; ELSEIF rslt = 1 THEN p_reset() COMMIT Using sqlca; END IF Return(rslt) end function public subroutine p_reset ();it_MXBT = 0 billid=0 rpid=0 end subroutine public function integer acceptmx (long arg_printid, string arg_col1name0, decimal arg_col1name1, decimal arg_col1name2, string arg_col2name0, decimal arg_col2name1, decimal arg_col2name2, ref string arg_msg);Int rslt = 1 Long cnt = 0,LS_i,ls_j //清除空值 IF IsNull(arg_printid) THEN arg_printid =0 IF IsNull(arg_col1name0) THEN arg_col1name0 ='' IF IsNull(arg_col1name1) THEN arg_col1name1= 0 IF IsNull(arg_col1name2) THEN arg_col1name2 = 0 IF IsNull(arg_col2name0) THEN arg_col2name0 ='' IF IsNull(arg_col2name1) THEN arg_col2name1= 0 IF IsNull(arg_col2name2) THEN arg_col2name2 = 0 IF IsNull(arg_msg) THEN arg_msg ='' if arg_printid=0 then arg_msg="行printid错误" rslt = 0 goto ext end if //写入内容 it_mxbt++ ss_rp[it_mxbt].printid = arg_printid ss_rp[it_mxbt].col1name0 = arg_col1name0 ss_rp[it_mxbt].col1name1 = arg_col1name1 ss_rp[it_mxbt].col1name2 = arg_col1name2 ss_rp[it_mxbt].col2name0 = arg_col2name0 ss_rp[it_mxbt].col2name1 = arg_col2name1 ss_rp[it_mxbt].col2name2 = arg_col2name2 ext: if rslt=0 then p_reset() return rslt end function public function integer f_delete (long arg_billid, ref string arg_msg);Integer rslt = 1,cnt = 0,i,j,k DateTime server_dt Long ll_cpid,ll_ppid,ll_cusid,ll_crid String ls_sccode if arg_billid=0 then rslt = 0 arg_msg = "错误的单据ID,billid" GOTO ext end if DELETE From u_sp_rp Where u_sp_rp.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致删除单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF DELETE From u_sp_rp_mx Where u_sp_rp_mx.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致删除单据操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF ext: IF rslt = 0 THEN p_reset() ROLLBACK Using sqlca; ELSEIF rslt = 1 THEN COMMIT Using sqlca; END IF Return(rslt) end function on uo_rp.create call super::create TriggerEvent( this, "constructor" ) end on on uo_rp.destroy TriggerEvent( this, "destructor" ) call super::destroy end on