$PBExportHeader$uo_taskdamt.sru forward global type uo_taskdamt from nonvisualobject end type type s_saleplanmx from structure within uo_taskdamt end type end forward type s_saleplanmx from structure long mtrlid string mtrlcode long printid decimal { 5 } planqty string mxdscrp end type global type uo_taskdamt from nonvisualobject end type global uo_taskdamt uo_taskdamt type variables Long uo_billid //Int uo_option_msttake_takeamt_secaudit end variables forward prototypes public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg) public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer p_update_bmstpay (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer p_cancel_bmstpay (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_scid < 0 THEN rslt = 0 arg_msg = '请选择正确的分部' GOTO ext END IF IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_permitflag SELECT flag INTO :li_permitflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败' rslt = 0 GOTO ext END IF IF li_permitflag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,ll_i,i String ls_sccode,ls_billcode Long ll_cusid_mx Long ll_moneyid_account,ll_moneyid_native If IsNull(arg_s_bd.scid) Then arg_s_bd.scid = 0 If IsNull(arg_s_bd.billid) Then arg_s_bd.billid = 0 If IsNull(arg_s_bd.cussptid) Then arg_s_bd.cussptid = 0 If IsNull(arg_s_bd.part) Then arg_s_bd.part = '' If IsNull(arg_s_bd.assign_emp) Then arg_s_bd.assign_emp = '' If IsNull(arg_s_bd.dscrp) Then arg_s_bd.dscrp = '' If IsNull(arg_s_bd.ifauto) Then arg_s_bd.ifauto = 0 If IsNull(arg_s_bd.salebillid) Then arg_s_bd.salebillid = 0 If IsNull(arg_s_bd.billtype) Then arg_s_bd.billtype = 1 If IsNull(arg_s_bd.dscrp_yt) Then arg_s_bd.dscrp_yt ="" If IsNull(arg_s_bd.dscrp_sm) Then arg_s_bd.dscrp_sm = "" If IsNull(arg_s_bd.dscrp_yq) Then arg_s_bd.dscrp_yq = "" If arg_s_bd.billtype = 1 Then If arg_s_bd.cussptid = 0 Then rslt = 0 arg_msg = "请选择供应商!" Goto ext End If cnt = 0 Select count(*) Into :cnt From u_spt Where sptid = :arg_s_bd.cussptid; If sqlca.SQLCode <> 0 Then arg_msg = '查询供应商资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Else If arg_s_bd.cussptid = 0 Then rslt = 0 arg_msg = "请选择客户!" Goto ext End If cnt = 0 Select count(*) Into :cnt From u_cust Where cusid = :arg_s_bd.cussptid; If sqlca.SQLCode <> 0 Then arg_msg = '查询客户资料失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If 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 it_mxbt = UpperBound(arg_s_bd.arg_s_mx) If it_mxbt <= 0 Then rslt = 0 arg_msg = "没有正确明细内容" 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 //检查明细 For ll_i = 1 To it_mxbt If IsNull(arg_s_bd.arg_s_mx[ll_i].dscrp) Then arg_s_bd.arg_s_mx[ll_i].dscrp = '' If IsNull(arg_s_bd.arg_s_mx[ll_i].damt) Then arg_s_bd.arg_s_mx[ll_i].damt = 0 If arg_s_bd.arg_s_mx[ll_i].realmoneyid = 0 Then rslt = 0 If arg_s_bd.billtype = 1 Then arg_msg = '明细行:'+String(ll_i)+',请选择应付帐币种' Else arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种' End If Goto ext End If If arg_s_bd.arg_s_mx[ll_i].realrate = 0 Then rslt = 0 If arg_s_bd.billtype = 1 Then arg_msg = '明细行:'+String(ll_i)+',请选择应付帐币种汇率' Else arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种汇率' End If Goto ext End If If arg_s_bd.arg_s_mx[ll_i].accountsid = 0 Then rslt = 0 arg_msg = '明细行:'+String(ll_i)+',请选择出纳帐号' Goto ext End If Select moneyid Into :ll_moneyid_account From u_accounts Where accountsid = :arg_s_bd.arg_s_mx[ll_i].accountsid; If sqlca.SQLCode <> 0 Then arg_msg = '明细行:'+String(ll_i)+',查询帐号币种失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If If IsNull(ll_moneyid_account) Then ll_moneyid_account = 0 If ll_moneyid_account = 0 Then arg_msg = '明细行:'+String(ll_i)+',帐号币种未指定,请检查' rslt = 0 Goto ext End If If arg_s_bd.arg_s_mx[ll_i].realmoneyid <> ll_moneyid_account And arg_s_bd.arg_s_mx[ll_i].realrate = 1 Then If arg_s_bd.billtype = 1 Then arg_msg = '明细行:'+String(ll_i)+',付款币种与帐号币种不相同,汇率不能设为1' Else arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种不相同,汇率不能设为1' End If rslt = 0 Goto ext End If If arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_account And arg_s_bd.arg_s_mx[ll_i].realrate <> 1 Then If arg_s_bd.billtype = 1 Then arg_msg = '明细行:'+String(ll_i)+',付款币种与帐号币种相同,汇率要设为1' Else arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种相同,汇率要设为1' End If rslt = 0 Goto ext End If If ll_moneyid_account = ll_moneyid_native Then If arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_native Then arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2) Else arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt / arg_s_bd.arg_s_mx[ll_i].realrate,2) End If Else arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2) End If If arg_s_bd.arg_s_mx[ll_i].itemid = 0 Then rslt = 0 arg_msg = '请选择收支项目' Goto ext End If If arg_s_bd.billtype = 0 Then Select cusid Into :ll_cusid_mx From u_saletask Where taskid = :arg_s_bd.arg_s_mx[ll_i].relid And scid = :arg_s_bd.scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败>>相关的销售订单的客户ID"+"~n"+sqlca.SQLErrText Goto ext End If Else Select sptid Into :ll_cusid_mx From u_buytask Where taskid = :arg_s_bd.arg_s_mx[ll_i].relid And scid = :arg_s_bd.scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败>>相关的销售订单的供应商ID"+"~n"+sqlca.SQLErrText Goto ext End If End If If ll_cusid_mx <> arg_s_bd.cussptid Then rslt = 0 If arg_s_bd.billtype = 1 Then arg_msg = "单据的供应商ID与单据明细采购订单的供应商ID不相符,请检查,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" Else arg_msg = "单据的客户ID与单据明细销售订单的客户ID不相符,请检查,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" End If Goto ext End If If arg_s_bd.ifauto = 0 And arg_s_bd.arg_s_mx[ll_i].billtype = 2 Then rslt = 0 If arg_s_bd.billtype = 1 Then arg_msg = "手动订单付款单类型不能选择自动对帐,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" Else arg_msg = "手动订单收款单类型不能选择自动对帐,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" End If Goto ext End If Next If arg_s_bd.billid = 0 Then ll_billid = f_sys_scidentity(0,"u_taskdamt","billid",arg_msg,True,id_sqlca) If ll_billid <= 0 Then rslt = 0 Goto ext End If If f_get_sccode(arg_s_bd.scid,sqlca,ls_sccode,arg_msg) = 0 Then rslt = 0 Goto ext End If If arg_s_bd.billtype = 0 Then ls_billcode = getid(arg_s_bd.scid,ls_sccode + 'SD',Date(server_dt),False,sqlca) If ls_billcode = "err" Then rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText Goto ext End If ElseIf arg_s_bd.billtype = 1 Then ls_billcode = getid(arg_s_bd.scid,ls_sccode + 'TB',Date(server_dt),False,sqlca) If ls_billcode = "err" Then rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText Goto ext End If End If Insert Into u_taskdamt ( scid, billid, billcode, cussptid, part, billdate, assign_emp, dscrp, opdate, opemp , ifauto, salebillid, billtype, dscrp_yt, dscrp_sm, dscrp_yq) Values ( :arg_s_bd.scid, :ll_billid, :ls_billcode, :arg_s_bd.cussptid, :arg_s_bd.part, :arg_s_bd.billdate, :arg_s_bd.assign_emp, :arg_s_bd.dscrp, :server_dt, :publ_operator, :arg_s_bd.ifauto, :arg_s_bd.salebillid, :arg_s_bd.billtype, :arg_s_bd.dscrp_yt, :arg_s_bd.dscrp_sm, :arg_s_bd.dscrp_yq) ; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText Goto ext End If For i = 1 To it_mxbt Insert Into u_taskdamt_mx (scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, billtype, banktypeid) Values ( :arg_s_bd.scid, :ll_billid, :arg_s_bd.arg_s_mx[i].printid, :arg_s_bd.arg_s_mx[i].RELid, :arg_s_bd.arg_s_mx[i].reltaskcode, :arg_s_bd.arg_s_mx[i].DAMT, :arg_s_bd.arg_s_mx[i].dscrp, :arg_s_bd.arg_s_mx[i].accountsid, :arg_s_bd.arg_s_mx[i].billamt, :arg_s_bd.arg_s_mx[i].itemid, :arg_s_bd.arg_s_mx[i].takeamt, :arg_s_bd.arg_s_mx[i].reltakeamt, :arg_s_bd.arg_s_mx[i].reldamt, :arg_s_bd.arg_s_mx[i].realmoneyid, :arg_s_bd.arg_s_mx[i].realrate, :arg_s_bd.arg_s_mx[i].realamt, :arg_s_bd.arg_s_mx[i].billtype, :arg_s_bd.arg_s_mx[i].banktypeid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next uo_billid = ll_billid Else Update u_taskdamt Set cussptid = :arg_s_bd.CUSSPTID, part = :arg_s_bd.PART, billdate = :arg_s_bd.BILLDATE, assign_emp = :arg_s_bd.ASSIGN_EMP, dscrp = :arg_s_bd.DSCRP, moddate = getdate(), modemp = :publ_operator, dscrp_yt = :arg_s_bd.dscrp_yt, dscrp_sm = :arg_s_bd.dscrp_sm, dscrp_yq = :arg_s_bd.dscrp_yq Where billid = :arg_s_bd.billid And scid = :arg_s_bd.scid And 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_TASKDAMT_mx Where billid = :arg_s_bd.billid And scid = :arg_s_bd.scid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If For i = 1 To it_mxbt Insert Into u_taskdamt_mx (scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, billtype, banktypeid) Values ( :arg_s_bd.scid, :arg_s_bd.billid, :arg_s_bd.arg_s_mx[i].printid, :arg_s_bd.arg_s_mx[i].RELid, :arg_s_bd.arg_s_mx[i].reltaskcode, :arg_s_bd.arg_s_mx[i].DAMT, :arg_s_bd.arg_s_mx[i].dscrp, :arg_s_bd.arg_s_mx[i].accountsid, :arg_s_bd.arg_s_mx[i].billamt, :arg_s_bd.arg_s_mx[i].itemid, :arg_s_bd.arg_s_mx[i].takeamt, :arg_s_bd.arg_s_mx[i].reltakeamt, :arg_s_bd.arg_s_mx[i].reldamt, :arg_s_bd.arg_s_mx[i].realmoneyid, :arg_s_bd.arg_s_mx[i].realrate, :arg_s_bd.arg_s_mx[i].realamt, :arg_s_bd.arg_s_mx[i].billtype, :arg_s_bd.arg_s_mx[i].banktypeid); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next // uo_billid = arg_s_bd.billid End If ext: If rslt = 0 Then Rollback; ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF Int li_flag SELECT flag INTO :li_flag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败' rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '单据未审核,请按修改单据修改备注' GOTO ext END IF UPDATE u_taskdamt SET dscrp = dscrp+' '+:arg_newdescppart Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_damtflag,li_billtype,li_ifauto Decimal ld_takeamt Long ll_scid,ll_billtype SELECT flag,scid,ifauto,billtype INTO :li_auditflag,:ll_scid,:li_ifauto,:ll_billtype FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN rslt = 0 arg_msg = '单据已经最终审核,不可以再审!' GOTO ext END IF s_taskdamtmx arg_bd_mx[] Long ll_i IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF UpperBound(arg_bd_mx) <= 0 THEN rslt = 0 arg_msg = "明细错误,操作取消" GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1 //billtype 0-订金; 1-余款; 2-对账 IF sys_option_mst_multimoney = 1 THEN //使用多币种 ld_takeamt = arg_bd_mx[ll_i].takeamt ELSE // 系统不使用多币种,转换为人民币 ld_takeamt = arg_bd_mx[ll_i].realamt END IF //ld_takeamt = arg_bd_mx[ll_i].realamt if ll_billtype = 0 then IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 UPDATE u_SaleTask SET takedamt = takedamt + :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE //单据余款 UPDATE u_SaleTask SET takeamt = takeamt + :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN IF p_update_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF else UPDATE u_buytask SET payamt = payamt + :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新采购订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_ifauto = 0 THEN IF p_update_bmstpay(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF end if NEXT //更新审核标记 UPDATE u_taskdamt SET permit_emp = :publ_operator, permit_date = getdate(), flag = 1 WHERE billid = :arg_billid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag SELECT flag INTO :li_auditflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN rslt = 0 arg_msg = '单据已经最终审核,不可以删除' GOTO ext END IF DELETE FROM u_taskdamt_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = " 删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_bdmx CURSOR FOR SELECT scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, banktypeid, paytaskid, billtype FROM u_taskdamt_mx WHERE billid = :arg_billid Order By printid; OPEN cur_bdmx; FETCH cur_bdmx INTO :arg_ref_s_mx[i].scid, :arg_ref_s_mx[i].billID, :arg_ref_s_mx[i].printid, :arg_ref_s_mx[i].relid, :arg_ref_s_mx[i].reltaskcode, :arg_ref_s_mx[i].damt, :arg_ref_s_mx[i].dscrp, :arg_ref_s_mx[i].accountsid, :arg_ref_s_mx[i].billamt, :arg_ref_s_mx[i].itemid, :arg_ref_s_mx[i].takeamt, :arg_ref_s_mx[i].reltakeamt, :arg_ref_s_mx[i].reldamt, :arg_ref_s_mx[i].realmoneyid, :arg_ref_s_mx[i].realrate, :arg_ref_s_mx[i].realamt, :arg_ref_s_mx[i].banktypeid, :arg_ref_s_mx[i].paytaskid, :arg_ref_s_mx[i].billtype; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_bdmx INTO :arg_ref_s_mx[i].scid, :arg_ref_s_mx[i].billID, :arg_ref_s_mx[i].printid, :arg_ref_s_mx[i].relid, :arg_ref_s_mx[i].reltaskcode, :arg_ref_s_mx[i].damt, :arg_ref_s_mx[i].dscrp, :arg_ref_s_mx[i].accountsid, :arg_ref_s_mx[i].billamt, :arg_ref_s_mx[i].itemid, :arg_ref_s_mx[i].takeamt, :arg_ref_s_mx[i].reltakeamt, :arg_ref_s_mx[i].reldamt, :arg_ref_s_mx[i].realmoneyid, :arg_ref_s_mx[i].realrate, :arg_ref_s_mx[i].realamt, :arg_ref_s_mx[i].banktypeid, :arg_ref_s_mx[i].paytaskid, :arg_ref_s_mx[i].billtype; LOOP CLOSE cur_bdmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_taskdamt_mx Where billid = :arg_billid; 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 ext: RETURN rslt end function public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0,i uo_musttake uo_take uo_take = Create uo_musttake uo_iteminput uo_item uo_item = Create uo_iteminput String ls_mtrlname String ls_about Long ref_dateint //IF sys_option_msttake_takeamt_secaudit = -1000 THEN // arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' // rslt = 0 // GOTO ext //END IF IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using sqlca ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消" GOTO ext END IF Long ll_cusid DateTime ld_indate String ls_assign_emp,ls_billcode,ls_part Decimal ld_takeamt String ls_taskcode Long ll_saletaskid,ll_banktypeid,ll_moneyid,ll_accountsid,ll_itemid Dec ll_realamt Long ll_billtype Long ll_moneyid_account Decimal ld_mrate SELECT u_taskdamt.cussptid, u_taskdamt.billdate, u_taskdamt.assign_emp, u_taskdamt.billcode, u_taskdamt.part, u_taskdamt_mx.billtype, u_taskdamt_mx.takeamt, u_taskdamt_mx.relTaskCode, u_taskdamt_mx.banktypeid, u_taskdamt_mx.relid, u_taskdamt_mx.realmoneyid, u_taskdamt_mx.accountsid, u_taskdamt_mx.itemid, u_taskdamt_mx.realamt, u_taskdamt_mx.realrate INTO :ll_cusid, :ld_indate, :ls_assign_emp, :ls_billcode, :ls_part, :ll_billtype, :ld_takeamt, :ls_taskcode, :ll_banktypeid, :ll_saletaskid, :ll_moneyid, :ll_accountsid, :ll_itemid, :ll_realamt, :ld_mrate FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订金单相关信息!" +sqlca.SQLErrText GOTO ext END IF SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :ll_accountsid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0 IF ll_moneyid_account = 0 THEN arg_msg = '帐号币种未指定,请检查' rslt = 0 GOTO ext END IF IF ld_takeamt <> 0 THEN IF ll_billtype = 0 THEN ls_about = ls_taskcode + "订金已收款" ELSE ls_about = ls_taskcode + "余额已收款" END IF // IF sys_option_m_msttake = 1 THEN //使用多币种 // ld_takeamt = ld_takeamt_bill // ELSE // 系统不使用多币种,转换为人民币 // ld_takeamt = ll_realamt // END IF // // ld_msttakeamt = ld_takeamt_bill // ld_takeamt = ld_msttakeamt s_bmsttake s_take s_take.scid = arg_scid s_take.cusid = ll_cusid s_take.takedate = ld_indate s_take.inrep = ls_assign_emp s_take.oriamt = 0 - ll_realamt s_take.msttakeamt = 0 s_take.takeamt_cn = ld_takeamt s_take.takeamt = ll_realamt s_take.dscrp = ls_about s_take.billcode = ls_billcode s_take.banktypeid = ll_banktypeid s_take.buildtype = 4 s_take.opemp = publ_operator s_take.outwareid = ll_saletaskid s_take.salebillid = 0 s_take.viewdate = ld_indate s_take.accountsid = ll_accountsid s_take.itemid = ll_itemid s_take.moneyid = ll_moneyid s_take.moneyid_cn = ll_moneyid_account s_take.relcode = ls_part //////////////////////////////////// // // s_take.scid = arg_scid // s_take.cusID = ll_cusid // s_take.takedate = ld_indate // s_take.inrep = ls_assign_emp // s_take.oriamt = 0 - ll_realamt // s_take.msttakeamt = 0 // s_take.takeamt = ll_realamt // s_take.takeamt_cn = ld_takeamt // // s_take.fpamt = ll_realamt // // s_take.dscrp = ls_about // s_take.billcode = ls_billcode // s_take.relcode = ls_part // s_take.banktypeid = ll_banktypeid // s_take.opemp = publ_operator // s_take.buildtype = 1 // s_take.outwareid = ll_saletaskid // s_take.accountsid = ll_accountsid // s_take.itemid = ll_itemid // s_take.moneyid = ll_moneyid // s_take.moneyid_cn = ll_moneyid_account // s_take.mrate = ld_mrate // // s_take.taskdscrp = '订单'+ls_taskcode+'金额:'+String(ld_takeamt,'#,##0.00') //////////////////////////////////// IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_taskdamt_mx SET paytaskid = :uo_take.ref_takeid WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF // INSERT INTO u_bmsttake_fpmx // (takeid, // printid, // relid, // relbillcode, // fpamt, // fpdate, // fpemp, // scid) // Values (:uo_take.ref_takeid, // 1, // :ll_saletaskid, // :ls_taskcode, // :ll_realamt, // getdate(), // :publ_operator, // :arg_scid); // IF sqlca.SQLCode <> 0 THEN // arg_msg = '插入应收帐分配明细失败,'+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF IF sys_option_msttake_takeamt_secaudit = 1 THEN Int li_item_dfttype,li_itemflag SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :ll_itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前收支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF s_iteminput s_input s_input.itemid = ll_itemid s_input.dateint = 0 s_input.outdate = ld_indate s_input.dscrp = ls_about s_input.outamt = ld_takeamt * li_itemflag s_input.accountsid = ll_accountsid s_input.banktypeid = ll_banktypeid s_input.billcode = ls_billcode s_input.relcode = ls_part s_input.buildtype = 1 s_input.opemp = publ_operator s_input.relrep = '' s_input.scid = arg_scid s_input.moneyid = ll_moneyid IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN arg_msg = '增加收支明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF // IF uo_item.add_iteminput(arg_scid,ll_itemid,0,ld_indate,ls_about ,ld_takeamt * li_itemflag,ll_accountsid,& // arg_msg,False,ll_banktypeid,1,ls_billcode,ll_moneyid,ls_part) = 0 THEN // arg_msg = '增加收支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF // s_iteminput s_input // // s_input.itemid = ll_itemid // s_input.dateint = 0 // s_input.outdate = ld_indate // s_input.dscrp = ls_about //'订单号:'+ls_taskcode+','+ls_dscrp // // CHOOSE CASE li_item_dfttype // CASE 1,3,4 // s_input.outamt = ld_takeamt * li_itemflag // CASE ELSE // s_input.outamt = ld_takeamt // END CHOOSE // // s_input.accountsid = ll_accountsid // s_input.banktypeid = ll_banktypeid // s_input.billcode = ls_billcode // s_input.relcode = ls_part // s_input.relrep = ls_assign_emp // s_input.opemp = publ_operator // s_input.buildtype = 1 // // IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN // arg_msg = '增加收支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF ref_dateint = uo_item.ref_dateint IF ref_dateint = 0 THEN arg_msg = '增加收支出纳明细帐失败!' rslt = 0 GOTO ext END IF UPDATE u_taskdamt_mx SET reldateint = :ref_dateint WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关出纳帐id失败' rslt = 0 GOTO ext END IF END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_take Destroy uo_item RETURN rslt end function public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0,i uo_musttake uo_take uo_take = Create uo_musttake uo_iteminput uo_item uo_item = Create uo_iteminput //IF sys_option_msttake_takeamt_secaudit = -1000 THEN // arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' // rslt = 0 // GOTO ext //END IF IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF Decimal ld_takeamt Long ll_cusid,ll_paytaskid Long ll_scid,ll_reldateint,ll_itemid SELECT u_taskdamt_mx.takeamt, u_taskdamt.cussptid, u_taskdamt_mx.paytaskid, u_taskdamt.scid, u_taskdamt_mx.reldateint, u_taskdamt_mx.itemid INTO :ld_takeamt, :ll_cusid, :ll_paytaskid, :ll_scid, :ll_reldateint, :ll_itemid FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid INNER JOIN u_saleTask ON u_taskdamt_mx.relid = u_saleTask.TaskID WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订单相关信息!" +sqlca.SQLErrText GOTO ext END IF IF ld_takeamt <> 0 THEN IF uo_take.del_takerec(ll_scid,1,ll_paytaskid,ll_cusid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF // DELETE FROM u_bmsttake_fpmx // Where takeid = :ll_paytaskid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "删除应收帐相关分配明细失败!" +sqlca.SQLErrText // GOTO ext // END IF END IF UPDATE u_taskdamt_mx SET paytaskid = 0 WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF IF sys_option_msttake_takeamt_secaudit = 1 THEN IF ll_itemid > 0 And ll_reldateint > 0 THEN IF uo_item.del_iteminput(ll_itemid,ll_reldateint,1,arg_msg,False) = 0 THEN arg_msg = '删除收支明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF UPDATE u_taskdamt_mx SET reldateint = 0 WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关出纳帐id失败' rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_take Destroy uo_item RETURN rslt end function public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_billtype,li_damtflag,li_ifauto Decimal ld_takeamt Long ll_scid,ll_billtype SELECT flag,scid,ifauto,billtype INTO :li_auditflag,:ll_scid,:li_ifauto,:ll_billtype FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = "单据还未最终审核,不可以撤审" GOTO ext END IF IF arg_del = 0 THEN IF li_ifauto = 1 THEN rslt = 0 arg_msg = "单据自动生成,不可手动撤审" GOTO ext END IF END IF s_taskdamtmx arg_bd_mx[] Long ll_i IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF UpperBound(arg_bd_mx) <= 0 THEN rslt = 0 arg_msg = "明细错误,操作取消" GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1 IF sys_option_mst_multimoney = 1 THEN //使用多币种 ld_takeamt = arg_bd_mx[ll_i].takeamt ELSE // 系统不使用多币种,转换为人民币 ld_takeamt = arg_bd_mx[ll_i].realamt END IF //ld_takeamt = arg_bd_mx[ll_i].realamt if ll_billtype = 0 then IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 UPDATE u_SaleTask SET takedamt = takedamt - :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE //单据余款 UPDATE u_SaleTask SET takeamt = takeamt - :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN IF p_cancel_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF else UPDATE u_buytask SET payamt = payamt - :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新采购订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF li_ifauto = 0 THEN IF p_cancel_bmstpay(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF end if NEXT //更新审核标记 UPDATE u_taskdamt SET permit_emp = '', permit_date = :null_dt, flag = 0 WHERE billid = :arg_billid And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer p_update_bmstpay (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0,i uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_iteminput uo_item uo_item = Create uo_iteminput String ls_mtrlname String ls_about Long ref_dateint IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using sqlca ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消" GOTO ext END IF Long ll_cusid DateTime ld_indate String ls_assign_emp,ls_billcode,ls_part Decimal ld_takeamt,ld_mstpayamt String ls_taskcode Long ll_saletaskid,ll_banktypeid,ll_moneyid,ll_accountsid,ll_itemid Dec ll_realamt Long ll_billtype Long ll_moneyid_account Decimal ld_mrate SELECT u_taskdamt.cussptid, u_taskdamt.billdate, u_taskdamt.assign_emp, u_taskdamt.billcode, u_taskdamt.part, u_taskdamt_mx.billtype, u_taskdamt_mx.takeamt, u_taskdamt_mx.relTaskCode, u_taskdamt_mx.banktypeid, u_taskdamt_mx.relid, u_taskdamt_mx.realmoneyid, u_taskdamt_mx.accountsid, u_taskdamt_mx.itemid, u_taskdamt_mx.realamt, u_taskdamt_mx.realrate, billamt INTO :ll_cusid, :ld_indate, :ls_assign_emp, :ls_billcode, :ls_part, :ll_billtype, :ld_takeamt, :ls_taskcode, :ll_banktypeid, :ll_saletaskid, :ll_moneyid, :ll_accountsid, :ll_itemid, :ll_realamt, :ld_mrate, :ld_mstpayamt FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid and u_taskdamt.billtype = 1 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订金单相关信息!" +sqlca.SQLErrText GOTO ext END IF SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :ll_accountsid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0 IF ll_moneyid_account = 0 THEN arg_msg = '帐号币种未指定,请检查' rslt = 0 GOTO ext END IF //IF uo_pay.add_payrec (arg_scid,ll_cusid,ld_indate,ls_assign_emp,ld_mstpayamt,ld_mstpayamt,ld_takeamt,ls_about,& // ls_billcode,ll_banktypeid,1,publ_operator,ll_saletaskid,0,arg_msg,False,ld_indate,ll_accountsid,ll_itemid,ll_moneyid,ls_part) = 0 THEN // rslt = 0 // GOTO ext //END IF IF ld_takeamt <> 0 THEN IF ll_billtype = 0 THEN ls_about = ls_taskcode + "订金已付款" ELSE ls_about = ls_taskcode + "余额已付款" END IF // s_bmstpay s_pay // // s_pay.scid = arg_scid // s_pay.sptid = ll_cusid // s_pay.paydate = ld_indate // s_pay.inrep = ls_assign_emp // s_pay.oriamt =ld_takeamt /// // s_pay.mstpayamt = ll_realamt/// // // s_pay.payamt = ld_takeamt // // s_pay.dscrp = ls_about // s_pay.billcode = ls_billcode // s_pay.banktypeid = ll_banktypeid // s_pay.buildtype = 4 /// // s_pay.opemp = publ_operator // s_pay.inwareid = ll_saletaskid // s_pay.buybillid = 0/// // s_pay.viewdate = ld_indate // s_pay.accountsid = ll_accountsid // s_pay.itemid = ll_itemid // s_pay.moneyid = ll_moneyid // s_pay.relcode = ls_part // // // IF uo_pay.add_payrecmx(arg_scid,uo_pay.ref_payid,ls_billcode,ld_indate,ll_banktypeid,ld_mstpayamt,ld_takeamt,& // publ_operator,ls_about,ls_assign_emp,3,0,ll_itemid,ll_cusid,arg_msg,False, ll_moneyid,ls_part) = 0 THEN // rslt = 0 // GOTO ext // END IF //IF uo_pay.add_payrec (arg_scid,ll_cusid,ld_indate,ls_assign_emp,ld_mstpayamt,ld_mstpayamt,ld_takeamt,ls_about,& // ls_billcode,ll_banktypeid,1,publ_operator,ll_saletaskid,0,arg_msg,False,ld_indate,ll_accountsid,ll_itemid,ll_moneyid,ls_part) = 0 THEN // rslt = 0 // GOTO ext //END IF IF uo_pay.add_payrec (arg_scid,ll_cusid,ld_indate,ls_assign_emp,ld_mstpayamt,0,ld_takeamt,ls_about,& ls_billcode,ll_banktypeid,1,publ_operator,ll_saletaskid,0,arg_msg,False,ld_indate,ll_accountsid,ll_itemid,ll_moneyid,ls_part) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_taskdamt_mx SET paytaskid = :uo_pay.ref_payid WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应付帐id失败' rslt = 0 GOTO ext END IF //以下代码不用,因为 add_payrec 中已增加了一次收支明细帐 // IF sys_option_msttake_takeamt_secaudit = 1 THEN // Int li_item_dfttype,li_itemflag // // SELECT dfttype,itemflag // INTO :li_item_dfttype,:li_itemflag // FROM u_itemdef // Where u_itemdef.itemid = :ll_itemid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询当前收支项目核算类型和核算方向失败!' // rslt = 0 // GOTO ext // END IF // // // s_iteminput s_input // // s_input.itemid = ll_itemid // s_input.dateint = 0 // s_input.outdate = ld_indate // s_input.dscrp = ls_about // s_input.outamt = ld_takeamt * li_itemflag // s_input.accountsid = ll_accountsid // s_input.banktypeid = ll_banktypeid // s_input.billcode = ls_billcode // s_input.relcode = ls_part // s_input.buildtype = 1 // s_input.opemp = publ_operator // s_input.relrep = '' // s_input.scid = arg_scid // s_input.moneyid = ll_moneyid // // IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN // arg_msg = '增加收支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF // // ref_dateint = uo_item.ref_dateint // // IF ref_dateint = 0 THEN // arg_msg = '增加收支出纳明细帐失败!' // rslt = 0 // GOTO ext // END IF // // UPDATE u_taskdamt_mx // SET reldateint = :ref_dateint // WHERE u_taskdamt_mx.billid = :arg_billid // And u_taskdamt_mx.printid = :arg_printid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '更新相关出纳帐id失败' // rslt = 0 // GOTO ext // END IF // END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_pay Destroy uo_item RETURN rslt end function public function integer p_cancel_bmstpay (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0,i uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_iteminput uo_item uo_item = Create uo_iteminput //IF sys_option_msttake_takeamt_secaudit = -1000 THEN // arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' // rslt = 0 // GOTO ext //END IF IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF Decimal ld_takeamt Long ll_cusid,ll_paytaskid Long ll_scid,ll_reldateint,ll_itemid SELECT u_taskdamt_mx.takeamt, u_taskdamt.cussptid, u_taskdamt_mx.paytaskid, u_taskdamt.scid, u_taskdamt_mx.reldateint, u_taskdamt_mx.itemid INTO :ld_takeamt, :ll_cusid, :ll_paytaskid, :ll_scid, :ll_reldateint, :ll_itemid FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid INNER JOIN u_buytask ON u_taskdamt_mx.relid = u_buytask.TaskID WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订单相关信息!" +sqlca.SQLErrText GOTO ext END IF IF ld_takeamt <> 0 THEN IF uo_pay.del_payrec(ll_scid,1,ll_paytaskid,ll_cusid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF // DELETE FROM u_bmsttake_fpmx // Where takeid = :ll_paytaskid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "删除应收帐相关分配明细失败!" +sqlca.SQLErrText // GOTO ext // END IF END IF UPDATE u_taskdamt_mx SET paytaskid = 0 WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF //IF sys_option_msttake_takeamt_secaudit = 1 THEN // IF ll_itemid > 0 And ll_reldateint > 0 THEN // IF uo_item.del_iteminput(ll_itemid,ll_reldateint,1,arg_msg,False) = 0 THEN // arg_msg = '删除收支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF // END IF // // UPDATE u_taskdamt_mx // SET reldateint = 0 // WHERE u_taskdamt_mx.billid = :arg_billid // And u_taskdamt_mx.printid = :arg_printid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '更新相关出纳帐id失败' // rslt = 0 // GOTO ext // END IF //END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_pay Destroy uo_item RETURN rslt end function on uo_taskdamt.create call super::create TriggerEvent( this, "constructor" ) end on on uo_taskdamt.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;//String arg_msg //String str_optionvalue //str_optionvalue = '' //f_get_sys_option_value('139',str_optionvalue,arg_msg) //uo_option_msttake_takeamt_secaudit = Long(str_optionvalue) end event global type uo_incase from nonvisualobject end type