$PBExportHeader$uo_mustpay.sru forward global type uo_mustpay from nonvisualobject end type type delmx from structure within uo_mustpay end type end forward type delmx from structure long payid long listno end type global type uo_mustpay from nonvisualobject end type global uo_mustpay uo_mustpay type variables long ref_payid = 0,ref_relrapid = 0 int uo_option_mstpay_balc end variables forward prototypes public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit) public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit) public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit) public function integer add_payrecmx (s_bmstpaymx arg_s_paymx, ref string arg_msg, boolean arg_ifcommit) public function integer add_payrec (s_bmstpay arg_s_pay, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mod_dscrp (long arg_payid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 ,cnt = 0 Long buildtype = 0 Decimal mstpayamt,payamt DateTime null_datetime SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; 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 SELECT buildtype,mstpayamt,payamt INTO :buildtype,:mstpayamt,:payamt FROM u_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应收明细帐失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_del = 0 THEN IF buildtype <> 0 THEN arg_msg = '系统自动建立的应收明细帐不可以删除' rslt = 0 GOTO ext END IF END IF SetNull(null_datetime) UPDATE U_bmstpay SET mstpayamt = mstpayamt - :mstpayamt, payamt = payamt - :payamt, finishflag = 0, finishdate = :null_datetime Where U_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐金额失败,请重试>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 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 buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);delmx del_mx[] Long it_mxt Long ls_payid,ls_listno,i Int rslt = 1 DECLARE listno_cur CURSOR FOR SELECT U_BmstpayMX.payid, U_BmstpayMX.listno FROM U_BmstpayMX Where buybillid = :arg_buybillid; OPEN listno_cur; FETCH listno_cur INTO :ls_payid,:ls_listno; DO WHILE sqlca.SQLCode = 0 it_mxt++ del_mx[it_mxt].payid = ls_payid del_mx[it_mxt].listno = ls_listno FETCH listno_cur INTO :ls_payid,:ls_listno; LOOP CLOSE listno_cur; IF it_mxt = 0 THEN rslt = 1 GOTO ext ELSE FOR i = 1 TO it_mxt IF del_payrecmx (2,del_mx[i].payid, del_mx[i].listno,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT 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 del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 ,cnt = 0 Long maxid = 0 Long buildtype = 0 Decimal ls_mstpayamt,ls_payamt Long ll_itemid,ll_dateint Int ls_buildtype Long ll_ctmint DateTime ld_paydate Long ll_relrapid,ll_accountsid datetime ldt_lastdate If uo_option_mstpay_balc = -1000 Then rslt = 0 arg_msg = '选项:[392]应付帐使用结帐功能,读取初始默认值失败,操作取消!' Goto ext End If uo_iteminput uo_item uo_item = Create uo_iteminput uo_rapmoney uo_money uo_money = Create uo_rapmoney SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_sptid ; 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 SELECT buildtype, mstpayamt, payamt, itemid, rapmoneyid, paydate, ctmint, relrapid, accountsid INTO :ls_buildtype, :ls_mstpayamt, :ls_payamt, :ll_itemid, :ll_dateint, :ld_paydate, :ll_ctmint, :ll_relrapid, :ll_accountsid FROM u_bmstpay Where u_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_ctmint > 0 THEN arg_msg = '该记录资料已被截数,不能处理' rslt = 0 GOTO ext END IF If (ls_buildtype = 1 Or ls_buildtype = 4 ) And arg_del = 0 THEN arg_msg = '系统自动建立的应付帐不可以删除' rslt = 0 GOTO ext END IF //检查结帐日期 If uo_option_mstpay_balc = 1 Then Select top 1 balcdate Into :ldt_lastdate From u_money_balc Where billtype = 1 Order By balcdate Desc; If sqlca.SQLCode = 0 Then If ld_paydate < ldt_lastdate Then rslt = 0 arg_msg = '最近应付结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能删除发生日期为 '+String(ld_paydate,'yyyy-mm-dd')+' 的数据' Goto ext End If End If End If cnt = 0 SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE payid = :arg_payid And buildtype = 2; 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 ls_payamt <> 0 THEN IF uo_item.del_iteminput(ll_itemid,ll_dateint,1,arg_msg,False) = 0 THEN arg_msg = '删除出纳明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF //删除出纳帐 IF ll_relrapid > 0 THEN IF uo_money.del_raprec(ll_relrapid,ll_accountsid,1,arg_msg,False) = 0 THEN arg_msg = '删除出纳明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF DELETE U_bmstpaymx Where u_bmstpaymx.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstpay Where u_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应付帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 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 add_payrecmx (s_bmstpaymx arg_s_paymx, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Long cnt = 0,list_no DateTime server_datetime,null_datetime Decimal balcamt IF IsNull(arg_s_paymx.dscrp) THEN arg_s_paymx.dscrp = '' IF IsNull(arg_s_paymx.inrep) THEN arg_s_paymx.inrep = '' IF IsNull(arg_s_paymx.banktypeid) THEN arg_s_paymx.banktypeid = 0 IF IsNull(arg_s_paymx.billcode) THEN arg_s_paymx.billcode = '' IF IsNull(arg_s_paymx.relcode) THEN arg_s_paymx.relcode = '' IF IsNull(arg_s_paymx.opemp) THEN arg_s_paymx.opemp = '' IF IsNull(arg_s_paymx.scid) THEN arg_s_paymx.scid = 0 IF IsNull(arg_s_paymx.itemid) THEN arg_s_paymx.itemid = 0 IF IsNull(arg_s_paymx.sptid) THEN arg_s_paymx.sptid = 0 IF IsNull(arg_s_paymx.moneyid) THEN arg_s_paymx.moneyid = 0 cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_paymx.scid; 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 SELECT Top 1 getdate() Into :server_datetime From u_user ; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF //1 判断新内容的合法性 IF Not (arg_s_paymx.buildtype = 0 Or & arg_s_paymx.buildtype = 1 Or & arg_s_paymx.buildtype = 2 Or & arg_s_paymx.buildtype = 3 Or & arg_s_paymx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐' rslt = 0 GOTO ext END IF IF arg_s_paymx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_paymx.paydate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_paymx.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :arg_s_paymx.banktypeid; 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 IF arg_s_paymx.mstpayamt = 0 And arg_s_paymx.payamt = 0 THEN arg_msg = "应收金额与已收金额不能同时为0!" rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_s_paymx.sptid; IF sqlca.SQLCode <> 0 THEN arg_msg = '加应付帐明细时查询操作失败,供应商唯一码' rslt = 0 GOTO ext END IF //2 判断是否已经选择当前操作员 cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_s_paymx.opemp ; 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 IF arg_s_paymx.moneyid = 0 THEN arg_msg = '没有币种' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_s_paymx.moneyid ; 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 IF arg_s_paymx.buildtype = 0 Or arg_s_paymx.buildtype = 2 Or arg_s_paymx.buildtype = 3 THEN SELECT max(listno) INTO :list_no FROM u_bmstpaymx Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询应收明细帐最大编号失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 Or IsNull(list_no) THEN list_no = 0 END IF list_no = list_no + 1 ELSE list_no = 0 END IF //3 向应收帐明细表插入新记录,失败则回滚 INSERT INTO u_bmstpaymx (scid, payid, listno, billcode, relcode, paydate, banktypeid, mstpayamt, payamt, opdate, opemp, dscrp, inrep, buildtype, buybillid, itemid, sptid, moneyid) VALUES (:arg_s_paymx.scid, :arg_s_paymx.payid, :list_no, :arg_s_paymx.billcode, :arg_s_paymx.relcode, :arg_s_paymx.paydate, :arg_s_paymx.banktypeid, :arg_s_paymx.mstpayamt, :arg_s_paymx.payamt, :server_datetime, :arg_s_paymx.opemp, :arg_s_paymx.dscrp, :arg_s_paymx.inrep, :arg_s_paymx.buildtype, :arg_s_paymx.buybillid, :arg_s_paymx.itemid, :arg_s_paymx.sptid, :arg_s_paymx.moneyid) ; IF sqlca.SQLCode <> 0 THEN arg_msg = "向应收帐表插入应收明细帐记录失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_s_paymx.buildtype <> 1 THEN SELECT mstpayamt - payamt Into :balcamt From u_bmstpay Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前单据结余金额失败' rslt = 0 GOTO ext END IF IF balcamt <= 0 THEN If arg_s_paymx.buildtype <> 3 and ( arg_s_paymx.payamt - arg_s_paymx.mstpayamt) > 0 THEN arg_msg = '当前处理金额大于单据结余金额,请检查' rslt = 0 GOTO ext END IF ELSE If ( arg_s_paymx.payamt - arg_s_paymx.mstpayamt) > balcamt THEN arg_msg = '当前处理金额大于单据结余金额,请检查' rslt = 0 GOTO ext END IF END IF UPDATE u_bmstpay SET mstpayamt = mstpayamt + :arg_s_paymx.mstpayamt, payamt = payamt + :arg_s_paymx.payamt Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐应收已付款失败,请重试!' rslt = 0 GOTO ext END IF IF balcamt = arg_s_paymx.payamt - arg_s_paymx.mstpayamt THEN UPDATE u_bmstpay SET finishflag = 1, finishdate = :server_datetime Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmstpay SET finishflag = 0, finishdate = :null_datetime Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE IF arg_s_paymx.mstpayamt = arg_s_paymx.payamt THEN UPDATE u_bmstpay SET finishflag = 1, finishdate = :arg_s_paymx.paydate Where payid = :arg_s_paymx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF 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 add_payrec (s_bmstpay arg_s_pay, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime server_datetime Long ls_newpayid Long ref_dateint String ls_sptname Int li_item_dfttype,li_itemflag Decimal ld_msttakeamt,ld_takeamt Long relrapid DateTime ldt_lastdate IF uo_option_mstpay_balc = -1000 THEN rslt = 0 arg_msg = '选项:[392]应付帐使用结帐功能,读取初始默认值失败,操作取消!' GOTO ext END IF //检查结帐日期 IF uo_option_mstpay_balc = 1 THEN SELECT top 1 balcdate INTO :ldt_lastdate FROM u_money_balc WHERE billtype = 1 Order By balcdate Desc; IF sqlca.SQLCode = 0 THEN IF arg_s_pay.paydate < ldt_lastdate THEN rslt = 0 arg_msg = '最近应付结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能再录入发生日期为 '+String(arg_s_pay.paydate,'yyyy-mm-dd')+' 的数据' GOTO ext END IF END IF END IF uo_iteminput uo_item uo_item = Create uo_iteminput uo_rapmoney uo_money uo_money = Create uo_rapmoney IF IsNull(arg_s_pay.dscrp) THEN arg_s_pay.dscrp = '' IF IsNull(arg_s_pay.inrep) THEN arg_s_pay.inrep = '' IF IsNull(arg_s_pay.banktypeid) THEN arg_s_pay.banktypeid = 0 IF IsNull(arg_s_pay.billcode) THEN arg_s_pay.billcode = '' IF IsNull(arg_s_pay.relcode) THEN arg_s_pay.relcode = '' IF IsNull(arg_s_pay.opemp) THEN arg_s_pay.opemp = '' IF IsNull(arg_s_pay.scid) THEN arg_s_pay.scid = 0 IF IsNull(arg_s_pay.accountsid) THEN arg_s_pay.accountsid = 0 IF IsNull(arg_s_pay.itemid) THEN arg_s_pay.itemid = 0 IF IsNull(arg_s_pay.moneyid) THEN arg_s_pay.moneyid = 0 IF lena(arg_s_pay.billcode) > 30 THEN arg_s_pay.billcode = LeftA(arg_s_pay.billcode,30) IF lena(arg_s_pay.relcode) > 50 THEN arg_s_pay.relcode = LeftA(arg_s_pay.relcode,50) IF lena(arg_s_pay.dscrp) > 255 THEN arg_s_pay.dscrp = LeftA(arg_s_pay.dscrp,255) cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_pay.scid; 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 SELECT Top 1 getdate() Into :server_datetime From u_user ; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF //1 判断新内容的合法性 IF Not (arg_s_pay.buildtype = 0 Or & arg_s_pay.buildtype = 1 Or & arg_s_pay.buildtype = 4 ) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;1-付款单记帐' rslt = 0 GOTO ext END IF IF arg_s_pay.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_pay.paydate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF arg_s_pay.payamt <> 0 THEN IF f_check_inoutdate(-100,arg_s_pay.paydate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF f_check_inoutdate(-0,arg_s_pay.paydate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF Trim(arg_s_pay.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_s_pay.moneyid ; 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 cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :arg_s_pay.banktypeid; 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 IF arg_s_pay.mstpayamt = 0 And arg_s_pay.payamt = 0 THEN arg_msg = "应付金额与已付金额不能同时为0!" rslt = 0 GOTO ext END IF IF arg_s_pay.oriamt <> arg_s_pay.mstpayamt - arg_s_pay.payamt THEN arg_s_pay.oriamt = arg_s_pay.mstpayamt - arg_s_pay.payamt END IF //2 判断是否已经选择当前客户和操作员 SELECT name INTO :ls_sptname FROM u_spt Where u_spt.sptid = :arg_s_pay.sptid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询操作失败,供应商唯一码' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_s_pay.opemp ; 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 IF arg_s_pay.accountsid > 0 THEN Long ll_moneyid SELECT moneyid INTO :ll_moneyid FROM u_accounts Where accountsid = :arg_s_pay.accountsid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询出纳帐号对应币种资料失败' rslt = 0 GOTO ext END IF IF ll_moneyid = 0 THEN arg_msg = '出纳帐号对应币种资料未设定' rslt = 0 GOTO ext END IF IF ll_moneyid <> arg_s_pay.moneyid_cn THEN arg_msg = '币种资料与出纳帐号币种资料不相符,不能保存' rslt = 0 GOTO ext END IF END IF SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :arg_s_pay.itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前收支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF //****************加收支帐 IF arg_s_pay.payamt_cn <> 0 THEN s_iteminput s_input s_input.itemid = arg_s_pay.itemid s_input.dateint = 0 s_input.outdate = arg_s_pay.paydate s_input.dscrp = ls_sptname +','+arg_s_pay.dscrp //yyx20120427原 // CHOOSE CASE li_item_dfttype // CASE 2,5 // s_input.outamt = -1 * arg_s_pay.payamt_cn * li_itemflag // CASE ELSE // s_input.outamt = arg_s_pay.payamt_cn // END CHOOSE //yyx20120427新 // IF li_itemflag = 1 THEN // s_input.outamt = -1 * arg_s_pay.payamt_cn * li_itemflag // ELSE // s_input.outamt = arg_s_pay.payamt_cn // END IF //// s_input.inamt = 0 s_input.outamt = arg_s_pay.payamt_cn s_input.accountsid = arg_s_pay.accountsid s_input.banktypeid = arg_s_pay.banktypeid s_input.billcode = arg_s_pay.billcode s_input.relcode = arg_s_pay.relcode s_input.opemp = arg_s_pay.opemp s_input.relrep = arg_s_pay.inrep s_input.scid = arg_s_pay.scid 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 ELSE arg_s_pay.accountsid = 0 END IF IF arg_s_pay.payamt_cn <> 0 THEN // IF li_itemflag = 1 THEN // //yyx20120427原ld_msttakeamt = arg_s_pay.payamt_cn // ld_msttakeamt = -1 * arg_s_pay.payamt_cn * li_itemflag // ld_takeamt = 0 // ELSE // ld_msttakeamt = 0 // ld_takeamt = arg_s_pay.payamt_cn // END IF ld_msttakeamt = 0 ld_takeamt = arg_s_pay.payamt_cn s_rap_money s_rap s_rap.accountsid = arg_s_pay.accountsid s_rap.takedate = arg_s_pay.paydate s_rap.inrep = arg_s_pay.inrep s_rap.dscrp = ls_sptname +','+arg_s_pay.dscrp s_rap.msttakeamt = ld_msttakeamt s_rap.takeamt = ld_takeamt s_rap.billcode = arg_s_pay.billcode s_rap.relcode = arg_s_pay.relcode s_rap.buildtype = 1 s_rap.dcflag = 0 s_rap.relid = 0 s_rap.opemp = arg_s_pay.opemp s_rap.banktypeid = arg_s_pay.banktypeid s_rap.scid = arg_s_pay.scid IF uo_money.add_raprec(s_rap,arg_msg,False) = 0 THEN arg_msg = '增加出纳明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF relrapid = uo_money.ref_rapid IF relrapid = 0 THEN arg_msg = '增加出纳明细帐失败!' rslt = 0 GOTO ext END IF END IF //3 向应付帐表插入新记录,失败则回滚 ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,True,id_sqlca) IF ls_newpayid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO U_Bmstpay ( scid, payid, sptid, paydate, inrep, oriamt, mstpayamt, payamt, Dscrp, billcode, relcode, banktypeid, buildtype, opdate, opemp, inwareid, viewdate, rapmoneyid, accountsid, itemid, moneyid, relrapid) VALUES ( :arg_s_pay.scid, :ls_newpayid, :arg_s_pay.sptid, :arg_s_pay.paydate, :arg_s_pay.inrep, :arg_s_pay.oriamt, :arg_s_pay.mstpayamt, :arg_s_pay.payamt, :arg_s_pay.dscrp, :arg_s_pay.billcode, :arg_s_pay.relcode, :arg_s_pay.banktypeid, :arg_s_pay.buildtype, :server_datetime, :arg_s_pay.opemp, :arg_s_pay.inwareid, :arg_s_pay.viewdate, :ref_dateint, :arg_s_pay.accountsid, :arg_s_pay.itemid, :arg_s_pay.moneyid, :relrapid) ; IF sqlca.SQLCode <> 0 THEN arg_msg = "向应收帐表插入应收记录失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //4 向应收帐明细表插入新记录,失败则回滚 s_bmstpaymx s_paymx s_paymx.scid = arg_s_pay.scid s_paymx.payid = ls_newpayid s_paymx.billcode = arg_s_pay.billcode s_paymx.relcode = arg_s_pay.relcode s_paymx.paydate = arg_s_pay.paydate s_paymx.banktypeid = arg_s_pay.banktypeid s_paymx.mstpayamt = arg_s_pay.mstpayamt s_paymx.payamt = arg_s_pay.payamt s_paymx.opemp = arg_s_pay.opemp s_paymx.dscrp = arg_s_pay.dscrp s_paymx.inrep = arg_s_pay.inrep s_paymx.buildtype = 1 s_paymx.buybillid = 0 s_paymx.itemid = arg_s_pay.itemid s_paymx.sptid = arg_s_pay.sptid s_paymx.moneyid = arg_s_pay.moneyid IF add_payrecmx(s_paymx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ref_payid = ls_newpayid ref_relrapid = relrapid ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_money Destroy uo_item RETURN rslt end function public function integer uof_mod_dscrp (long arg_payid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_buildtype Long ll_rapmoneyid,ll_dateint Long ll_scid,ll_sptid String ls_dscrp_update String ls_billcode String ls_sptname SELECT rapmoneyid,buildtype,scid,sptid,billcode INTO :ll_dateint,:li_buildtype,:ll_scid,:ll_sptid,:ls_billcode FROM u_bmstpay Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应收帐资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_buildtype <> 0 THEN arg_msg = '不是手动建立的资料,不能修改摘要' rslt = 0 GOTO ext END IF SELECT name INTO :ls_sptname FROM u_spt Where sptid = :ll_sptid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户名称失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_bmstpay SET dscrp = :arg_dscrp Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐摘要失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_bmstpaymx SET dscrp = :arg_dscrp WHERE payid = :arg_payid AND scid = :ll_scid AND buildtype = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收明细帐摘要失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_dateint > 0 THEN ls_dscrp_update = ls_sptname + ','+ls_billcode+','+arg_dscrp SELECT rapmoneyid INTO :ll_rapmoneyid FROM u_iteminput Where dateint = :ll_dateint; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询费用帐资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_iteminput SET dscrp = :ls_dscrp_update Where dateint = :ll_dateint; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新费用帐摘要失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_rap_money SET dscrp = :ls_dscrp_update Where rapmoneyid = :ll_rapmoneyid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新出纳帐摘要失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_mustpay.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mustpay.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('392',str_optionvalue,arg_msg) uo_option_mstpay_balc = Long(str_optionvalue) end event