$PBExportHeader$uo_musttake.sru forward global type uo_musttake from nonvisualobject end type type delmx from structure within uo_musttake end type end forward type delmx from structure long takeid long listno end type global type uo_musttake from nonvisualobject end type global uo_musttake uo_musttake type variables Long ref_takeid = 0 Int uo_option_msttake_takeamt_secaudit Int uo_option_m_msttake int uo_option_msttake_balc end variables forward prototypes public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit) public function integer salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit) public function integer del_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit) public function integer add_takerec (s_bmsttake arg_s_take, ref string arg_msg, boolean arg_ifcommit) public function integer add_takerecmx (s_bmsttakemx arg_s_takemx, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mod_dscrp (long arg_takeid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_mod_viewdate (long arg_takeid, datetime arg_viewdate, ref string arg_msg, boolean arg_ifcommit) public function integer add_fpamt (long arg_takeid, s_bmsttake_fpmx arg_s_mx[], ref string arg_msg, boolean arg_ifcommit) public function integer del_fpamt (long arg_takeid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);//删除应收帐 //del_TAKErecmx(arg_del,arg_takeid,arg_listno,arg_msg,arg_ifcommit) //arg_del 0:手动删除,1:应收帐删除,2:收入单删除 Int rslt = 1 ,cnt = 0 Long buildtype = 0 Decimal msttakeamt,takeamt,msttakeamt_rmb,takeamt_rmb DateTime null_datetime SELECT count(*) INTO :cnt FROM u_bmstTAKEmx WHERE u_bmstTAKEmx.takeid = :arg_takeid AND u_bmstTAKEmx.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,msttakeamt,takeamt,msttakeamt_rmb,takeamt_rmb INTO :buildtype,:msttakeamt,:takeamt,:msttakeamt_rmb,:takeamt_rmb FROM u_bmstTAKEmx WHERE u_bmstTAKEmx.takeid = :arg_takeid AND u_bmstTAKEmx.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_bmstTAKE SET msttakeamt = msttakeamt - :msttakeamt, takeamt = takeamt - :takeamt, msttakeamt_rmb = msttakeamt_rmb - :msttakeamt_rmb, takeamt_rmb = takeamt_rmb - :takeamt_rmb, finishflag = 0, finishdate = :null_datetime, finishflag_rmb = 0, finishdate_rmb = :null_datetime Where U_bmstTAKE.takeid = :arg_takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐金额失败,请重试>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstTAKEmx WHERE u_bmstTAKEmx.takeid = :arg_takeid AND u_bmstTAKEmx.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 salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit);//根据收入单删除应收帐明细 //salebill_del_mx(arg_salebillid,arg_msg,arg_ifcommit) delmx del_mx[] long it_mxt long ls_takeid,ls_listno,i int rslt=1 DECLARE listno_cur CURSOR FOR SELECT U_BmsttakeMX.Takeid, U_BmsttakeMX.listno FROM U_BmsttakeMX WHERE salebillid=:arg_salebillid; open listno_cur; fetch listno_cur into :ls_takeid,:ls_listno; do while sqlca.sqlcode=0 it_mxt++ del_mx[it_mxt].takeid=ls_takeid del_mx[it_mxt].listno=ls_listno fetch listno_cur into :ls_takeid,:ls_listno; loop close listno_cur; if it_mxt=0 then rslt=1 goto ext else for i=1 to it_mxt if del_takerecmx (2,del_mx[i].takeid, 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_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit);//删除应收帐 //del_TAKErec(arg_takeid,arg_cusid,arg_msg,arg_ifcommit) //1 判断是否有当前客户 //2 判断这个ID是否当前客户的最后一个明细记录。 //3 删除最后一行的记录行,失败回滚,成功提交。 Int rslt = 1 ,cnt = 0,li_finishflag Long maxid = 0 Long buildtype = 0 Long ls_buildtype Long ll_ctmint Decimal ls_msttakeamt,ls_takeamt Long ll_itemid,ll_dateint Long ll_printid_fp[] Long ll_mxbt,ll_i Long ll_relrapid,ll_accountsid datetime ldt_lastdate ll_mxbt = 1 If uo_option_msttake_takeamt_secaudit = -1000 Then rslt = 0 arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' Goto ext End If If uo_option_msttake_balc = -1000 Then rslt = 0 arg_msg = '选项:[391]应收帐使用结帐功能,读取初始默认值失败,操作取消!' Goto ext End If DateTime ld_ctdatetime,ld_takedate uo_iteminput uo_item uo_item = Create uo_iteminput uo_rapmoney uo_money uo_money = Create uo_rapmoney Select count(*) Into :cnt From u_CUST Where u_CUST.CUSid = :arg_CUSid ; 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, msttakeamt, takeamt, itemid, rapmoneyid, takedate, ctmint, finishflag, relrapid, accountsid Into :ls_buildtype, :ls_msttakeamt, :ls_takeamt, :ll_itemid, :ll_dateint, :ld_takedate, :ll_ctmint, :li_finishflag, :ll_relrapid, :ll_accountsid From u_bmsttake Where u_bmsttake.takeid = :arg_takeid; 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_msttake_balc = 1 Then Select top 1 balcdate Into :ldt_lastdate From u_money_balc Where billtype = 0 Order By balcdate Desc; If sqlca.SQLCode = 0 Then If ld_takedate < ldt_lastdate Then rslt = 0 arg_msg = '最近应收结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能删除发生日期为 '+String(ld_takedate,'yyyy-mm-dd')+' 的数据' Goto ext End If End If End If cnt = 0 Select count(*) Into :cnt From u_bmsttakemx Where takeid = :arg_takeid 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_buildtype <> 5 Then //********删除收支帐 If ls_takeamt <> 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 And ls_buildtype <> 4 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 End If If ls_buildtype = 0 Then Declare cur_fpmx Cursor For Select printid From u_bmsttake_fpmx Where takeid = :arg_takeid; Open cur_fpmx; Fetch cur_fpmx Into :ll_printid_fp[ll_mxbt]; Do While sqlca.SQLCode = 0 ll_mxbt++ Fetch cur_fpmx Into :ll_printid_fp[ll_mxbt]; Loop Close cur_fpmx; For ll_i = 1 To ll_mxbt - 1 If del_fpamt(arg_takeid,ll_printid_fp[ll_i],arg_msg,False) = 0 Then rslt = 0 Goto ext End If Next End If Delete U_bmstTAKEmx Where u_bmsttakemx.takeid = :arg_takeid; If sqlca.SQLCode <> 0 Then arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 Goto ext End If Delete U_bmstTAKE Where u_bmsttake.takeid = :arg_takeid; 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 Destroy uo_money Return rslt end function public function integer add_takerec (s_bmsttake arg_s_take, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0 DateTime server_datetime Long ls_newtakeid Long ref_dateint String ls_cusname Int li_item_dfttype,li_itemflag Decimal ld_msttakeamt,ld_takeamt Long relrapid DateTime ldt_lastdate uo_rapmoney uo_money uo_money = Create uo_rapmoney IF uo_option_msttake_takeamt_secaudit = -1000 THEN rslt = 0 arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_m_msttake = -1000 THEN rslt = 0 arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_msttake_balc = -1000 THEN rslt = 0 arg_msg = '选项:[391]应收帐使用结帐功能,读取初始默认值失败,操作取消!' GOTO ext END IF IF IsNull(arg_s_take.dscrp) THEN arg_s_take.dscrp = '' IF IsNull(arg_s_take.inrep) THEN arg_s_take.inrep = '' IF IsNull(arg_s_take.banktypeid) THEN arg_s_take.banktypeid = 0 IF IsNull(arg_s_take.billcode) THEN arg_s_take.billcode = '' IF IsNull(arg_s_take.relcode) THEN arg_s_take.relcode = '' IF IsNull(arg_s_take.opemp) THEN arg_s_take.opemp = '' IF IsNull(arg_s_take.scid) THEN arg_s_take.scid = 0 IF IsNull(arg_s_take.takeid) THEN arg_s_take.takeid = 0 IF IsNull(arg_s_take.accountsid) THEN arg_s_take.accountsid = 0 IF IsNull(arg_s_take.itemid) THEN arg_s_take.itemid = 0 IF IsNull(arg_s_take.moneyid) THEN arg_s_take.moneyid = 0 IF IsNull(arg_s_take.msttakeamt) THEN arg_s_take.msttakeamt = 0 IF IsNull(arg_s_take.takeamt) THEN arg_s_take.takeamt = 0 IF IsNull(arg_s_take.taskdscrp) THEN arg_s_take.taskdscrp = '' IF IsNull(arg_s_take.fpamt) THEN arg_s_take.fpamt = 0 IF IsNull(arg_s_take.mrate) THEN arg_s_take.mrate = 1 IF IsNull(arg_s_take.exchangeid) THEN arg_s_take.exchangeid = 0 IF lena(arg_s_take.billcode) > 30 THEN arg_s_take.billcode = LeftA(arg_s_take.billcode,30) IF lena(arg_s_take.relcode) > 50 THEN arg_s_take.relcode = LeftA(arg_s_take.relcode,50) IF lena(arg_s_take.dscrp) > 255 THEN arg_s_take.dscrp = LeftA(arg_s_take.dscrp,255) uo_iteminput uo_item uo_item = Create uo_iteminput //检查结帐日期 IF uo_option_msttake_balc = 1 THEN SELECT top 1 balcdate INTO :ldt_lastdate FROM u_money_balc WHERE billtype = 0 Order By balcdate Desc; IF sqlca.SQLCode = 0 THEN IF arg_s_take.takedate < ldt_lastdate THEN rslt = 0 arg_msg = '最近应收结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能再录入发生日期为 '+String(arg_s_take.takedate,'yyyy-mm-dd')+' 的数据' GOTO ext END IF END IF END IF cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_take.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 IF Not (arg_s_take.buildtype = 0 Or & arg_s_take.buildtype = 1 Or & arg_s_take.buildtype = 4 Or & arg_s_take.buildtype = 5) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-收款单记帐;5-冲帐' rslt = 0 GOTO ext END IF IF arg_s_take.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF arg_s_take.takeamt <> 0 THEN IF uo_option_msttake_takeamt_secaudit = 1 And & arg_s_take.buildtype = 4 THEN ELSE IF f_check_inoutdate(-100,arg_s_take.takedate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF f_check_inoutdate(0,arg_s_take.takedate,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF Trim(arg_s_take.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF arg_s_take.buildtype <> 5 THEN IF arg_s_take.banktypeid = 0 THEN arg_msg = '没有结算方式' rslt = 0 GOTO ext END IF END IF IF arg_s_take.moneyid = 0 THEN arg_msg = '没有币种' rslt = 0 GOTO ext END IF IF uo_option_m_msttake = 0 THEN IF arg_s_take.mrate = 0 THEN arg_msg = '不合理的汇率' rslt = 0 GOTO ext END IF END IF IF arg_s_take.msttakeamt = 0 And arg_s_take.takeamt = 0 THEN arg_msg = "应收金额与已收金额不能同时为0!" rslt = 0 GOTO ext END IF IF arg_s_take.oriamt <> arg_s_take.msttakeamt - arg_s_take.takeamt THEN arg_s_take.oriamt = arg_s_take.msttakeamt - arg_s_take.takeamt END IF SELECT name INTO :ls_cusname FROM u_cust Where u_cust.cusid = :arg_s_take.cusid; 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_take.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 cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_s_take.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_take.buildtype <> 5 THEN IF arg_s_take.accountsid > 0 THEN Long ll_moneyid SELECT moneyid INTO :ll_moneyid FROM u_accounts Where accountsid = :arg_s_take.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_take.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_take.itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前收支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF //加收支帐**************** IF arg_s_take.takeamt_cn <> 0 THEN s_iteminput s_input s_input.itemid = arg_s_take.itemid s_input.dateint = 0 s_input.outdate = arg_s_take.takedate s_input.dscrp = ls_cusname + ','+arg_s_take.dscrp //yyx20120427原 // CHOOSE CASE li_item_dfttype // CASE 1,3,4 // s_input.outamt = arg_s_take.takeamt_cn * li_itemflag // CASE ELSE // s_input.outamt = arg_s_take.takeamt_cn // END CHOOSE // If li_itemflag = 1 Then // s_input.outamt = arg_s_take.takeamt_cn // Else // s_input.outamt = arg_s_take.takeamt_cn * li_itemflag // End If // // s_input.inamt = arg_s_take.takeamt_cn s_input.outamt = 0 s_input.accountsid = arg_s_take.accountsid s_input.banktypeid = arg_s_take.banktypeid s_input.billcode = arg_s_take.billcode s_input.relcode = arg_s_take.relcode s_input.opemp = arg_s_take.opemp s_input.relrep = arg_s_take.inrep s_input.scid = arg_s_take.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 IF uo_option_msttake_takeamt_secaudit = 0 THEN arg_s_take.accountsid = 0 END IF END IF //----------------------------------------------------------------------- //加出纳帐-------------------------- // IF arg_s_take.takeamt_cn <> 0 And arg_s_take.buildtype <> 4 THEN // If li_itemflag = 1 Then // ld_msttakeamt = arg_s_take.takeamt_cn // ld_takeamt = 0 // Else // ld_msttakeamt = 0 // //yyx20120427原ld_takeamt = arg_s_take.takeamt_cn // ld_takeamt = arg_s_take.takeamt_cn * li_itemflag // End If ld_msttakeamt = arg_s_take.takeamt_cn ld_takeamt = 0 s_rap_money s_rap s_rap.accountsid = arg_s_take.accountsid s_rap.takedate = arg_s_take.takedate s_rap.inrep = arg_s_take.inrep s_rap.dscrp = ls_cusname + ','+arg_s_take.dscrp s_rap.msttakeamt = ld_msttakeamt s_rap.takeamt = ld_takeamt s_rap.billcode = arg_s_take.billcode s_rap.relcode = arg_s_take.relcode s_rap.buildtype = 1 s_rap.dcflag = 0 s_rap.relid = 0 s_rap.opemp = arg_s_take.opemp s_rap.banktypeid = arg_s_take.banktypeid s_rap.scid = arg_s_take.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 END IF ls_newtakeid = f_sys_scidentity(0,"u_bmsttake","takeid",arg_msg,True,id_sqlca) IF ls_newtakeid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_bmsttake ( scid, takeid, cusid, takedate, inrep, oriamt, msttakeamt, takeamt, oriamt_rmb, msttakeamt_rmb, takeamt_rmb, dscrp, billcode, relcode, banktypeid, buildtype, opdate, opemp, outwareid, viewdate, accountsid, rapmoneyid, itemid, moneyid, taskdscrp, fpamt, relrapid, mrate, exchangeid) VALUES ( :arg_s_take.scid, :ls_newtakeid, :arg_s_take.cusid, :arg_s_take.takedate, :arg_s_take.inrep, :arg_s_take.oriamt, :arg_s_take.msttakeamt, :arg_s_take.takeamt, round(:arg_s_take.oriamt * :arg_s_take.mrate,2), round(:arg_s_take.msttakeamt * :arg_s_take.mrate,2), round(:arg_s_take.takeamt * :arg_s_take.mrate,2), :arg_s_take.dscrp, :arg_s_take.billcode, :arg_s_take.relcode, :arg_s_take.banktypeid, :arg_s_take.buildtype, :server_datetime, :arg_s_take.opemp, :arg_s_take.outwareid, :arg_s_take.viewdate, :arg_s_take.accountsid, :ref_dateint, :arg_s_take.itemid, :arg_s_take.moneyid, :arg_s_take.taskdscrp, :arg_s_take.fpamt, :relrapid, :arg_s_take.mrate, :arg_s_take.exchangeid) ; IF sqlca.SQLCode <> 0 THEN arg_msg = "向应收帐表插入应收记录失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF s_bmsttakemx s_takemx s_takemx.scid = arg_s_take.scid s_takemx.takeid = ls_newtakeid s_takemx.billcode = arg_s_take.billcode s_takemx.relcode = arg_s_take.relcode s_takemx.takedate = arg_s_take.takedate s_takemx.banktypeid = arg_s_take.banktypeid s_takemx.msttakeamt = arg_s_take.msttakeamt s_takemx.takeamt = arg_s_take.takeamt s_takemx.opemp = arg_s_take.opemp s_takemx.dscrp = arg_s_take.dscrp s_takemx.inrep = arg_s_take.inrep s_takemx.buildtype = 1 s_takemx.salebillid = 0 s_takemx.itemid = arg_s_take.itemid s_takemx.cusid = arg_s_take.cusid s_takemx.moneyid = arg_s_take.moneyid s_takemx.mrate = arg_s_take.mrate s_takemx.exchangeid = arg_s_take.exchangeid IF add_takerecmx(s_takemx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ref_takeid = ls_newtakeid ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_money RETURN rslt end function public function integer add_takerecmx (s_bmsttakemx arg_s_takemx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0,list_no DateTime server_datetime,null_datetime Decimal balcamt,balcamt_rmb IF IsNull(arg_s_takemx.dscrp) THEN arg_s_takemx.dscrp = '' IF IsNull(arg_s_takemx.inrep) THEN arg_s_takemx.inrep = '' IF IsNull(arg_s_takemx.banktypeid) THEN arg_s_takemx.banktypeid = 0 IF IsNull(arg_s_takemx.billcode) THEN arg_s_takemx.billcode = '' IF IsNull(arg_s_takemx.relcode) THEN arg_s_takemx.relcode = '' IF IsNull(arg_s_takemx.opemp) THEN arg_s_takemx.opemp = '' IF IsNull(arg_s_takemx.scid) THEN arg_s_takemx.scid = 0 IF IsNull(arg_s_takemx.itemid) THEN arg_s_takemx.itemid = 0 IF IsNull(arg_s_takemx.cusid) THEN arg_s_takemx.cusid = 0 IF IsNull(arg_s_takemx.msttakeamt) THEN arg_s_takemx.msttakeamt = 0 IF IsNull(arg_s_takemx.takeamt) THEN arg_s_takemx.takeamt = 0 IF IsNull(arg_s_takemx.moneyid) THEN arg_s_takemx.moneyid = 0 IF IsNull(arg_s_takemx.mrate) THEN arg_s_takemx.mrate = 1 IF IsNull(arg_s_takemx.exchangeid) THEN arg_s_takemx.exchangeid = 0 arg_s_takemx.msttakeamt_rmb = round(arg_s_takemx.msttakeamt * arg_s_takemx.mrate,2) arg_s_takemx.takeamt_rmb = round(arg_s_takemx.takeamt * arg_s_takemx.mrate,2) cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_takemx.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 IF Not (arg_s_takemx.buildtype = 0 Or & arg_s_takemx.buildtype = 1 Or & arg_s_takemx.buildtype = 2 Or & arg_s_takemx.buildtype = 3 Or & arg_s_takemx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-收款单记帐' rslt = 0 GOTO ext END IF IF arg_s_takemx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_takemx.takedate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_takemx.inrep) = '' THEN arg_s_takemx.inrep = '无' END IF IF arg_s_takemx.banktypeid = 0 THEN arg_msg = '没有结算方式(明细)' rslt = 0 GOTO ext END IF IF arg_s_takemx.moneyid = 0 THEN arg_msg = '没有币种' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_s_takemx.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_takemx.msttakeamt = 0 And arg_s_takemx.takeamt = 0 THEN arg_msg = "应收金额与已收金额不能同时为0!" rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where u_cust.cusid = :arg_s_takemx.cusid; 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_takemx.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_takemx.buildtype = 0 Or arg_s_takemx.buildtype = 2 Or arg_s_takemx.buildtype = 3 THEN SELECT max(listno) INTO :list_no FROM u_bmsttakemx Where takeid = :arg_s_takemx.takeid; 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_bmsttakemx (scid, takeid, listno, billcode, relcode, takedate, banktypeid, msttakeamt, takeamt, msttakeamt_rmb, takeamt_rmb, opdate, opemp, dscrp, inrep, buildtype, salebillid, itemid, cusid, moneyid, mrate, exchangeid) VALUES ( :arg_s_takemx.scid, :arg_s_takemx.takeid, :list_no, :arg_s_takemx.billcode, :arg_s_takemx.relcode, :arg_s_takemx.takedate, :arg_s_takemx.banktypeid, :arg_s_takemx.msttakeamt, :arg_s_takemx.takeamt, :arg_s_takemx.msttakeamt_rmb, :arg_s_takemx.takeamt_rmb, :server_datetime, :arg_s_takemx.opemp, :arg_s_takemx.dscrp, :arg_s_takemx.inrep, :arg_s_takemx.buildtype, :arg_s_takemx.salebillid, :arg_s_takemx.itemid, :arg_s_takemx.cusid, :arg_s_takemx.moneyid, :arg_s_takemx.mrate, :arg_s_takemx.exchangeid) ; IF sqlca.SQLCode <> 0 THEN arg_msg = "向应收帐表插入应收明细帐记录失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_s_takemx.buildtype <> 1 THEN SELECT msttakeamt - takeamt, msttakeamt_rmb - takeamt_rmb INTO :balcamt, :balcamt_rmb FROM u_bmsttake Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前单据结余金额失败' rslt = 0 GOTO ext END IF IF balcamt <= 0 THEN IF arg_s_takemx.buildtype <> 3 And ( arg_s_takemx.takeamt - arg_s_takemx.msttakeamt) > 0 THEN arg_msg = '当前处理金额大于单据结余金额,请检查' rslt = 0 GOTO ext END IF ELSE If (arg_s_takemx.takeamt - arg_s_takemx.msttakeamt) > balcamt THEN arg_msg = '当前处理金额大于单据结余金额,请检查' rslt = 0 GOTO ext END IF END IF UPDATE u_bmsttake SET msttakeamt = msttakeamt + :arg_s_takemx.msttakeamt, takeamt = takeamt + :arg_s_takemx.takeamt, msttakeamt_rmb = msttakeamt_rmb + :arg_s_takemx.msttakeamt_rmb, takeamt_rmb = takeamt_rmb + :arg_s_takemx.takeamt_rmb Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐应收已收款失败,请重试!' rslt = 0 GOTO ext END IF IF balcamt = arg_s_takemx.takeamt - arg_s_takemx.msttakeamt THEN UPDATE u_bmsttake SET finishflag = 1, finishdate = :arg_s_takemx.takedate Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmsttake SET finishflag = 0, finishdate = :null_datetime Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF balcamt_rmb = arg_s_takemx.takeamt_rmb - arg_s_takemx.msttakeamt_rmb THEN UPDATE u_bmsttake SET finishflag_rmb = 1, finishdate_rmb = :arg_s_takemx.takedate Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新人民币应收帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmsttake SET finishflag_rmb = 0, finishdate_rmb = :null_datetime Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新人民币应收帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE IF arg_s_takemx.msttakeamt = arg_s_takemx.takeamt THEN UPDATE u_bmsttake SET finishflag = 1, finishdate = :arg_s_takemx.takedate Where takeid = :arg_s_takemx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF arg_s_takemx.msttakeamt_rmb = arg_s_takemx.takeamt_rmb THEN UPDATE u_bmsttake SET finishflag_rmb = 1, finishdate_rmb = :arg_s_takemx.takedate Where takeid = :arg_s_takemx.takeid; 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 uof_mod_dscrp (long arg_takeid, 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_cusid String ls_dscrp_update String ls_billcode String ls_cusname SELECT rapmoneyid,buildtype,scid,cusid,billcode INTO :ll_dateint,:li_buildtype,:ll_scid,:ll_cusid,:ls_billcode FROM u_bmsttake Where takeid = :arg_takeid; 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_cusname FROM u_cust Where cusid = :ll_cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户名称失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_bmsttake SET dscrp = :arg_dscrp Where takeid = :arg_takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐摘要失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_bmsttakemx SET dscrp = :arg_dscrp WHERE takeid = :arg_takeid 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_cusname + ','+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 public function integer uof_mod_viewdate (long arg_takeid, datetime arg_viewdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_bmsttake SET viewdate = :arg_viewdate Where takeid = :arg_takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐摘要失败,'+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_fpamt (long arg_takeid, s_bmsttake_fpmx arg_s_mx[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_i Long ll_printid_max,ll_printid Select max(printid) Into :ll_printid_max From u_bmsttake_fpmx Where takeid = :arg_takeid; If sqlca.SQLCode <> 0 Then ll_printid_max = 0 End If If IsNull(ll_printid_max) Then ll_printid_max = 0 ll_printid = ll_printid_max For ll_i = 1 To UpperBound(arg_s_mx) If arg_s_mx[ll_i].Kind = 1 Then //订金 Update u_saletask Set takedamt = takedamt + :arg_s_mx[ll_i].fpamt Where scid = :arg_s_mx[ll_i].scid And taskid = :arg_s_mx[ll_i].relid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新订单:'+arg_s_mx[ll_i].relbillcode+' 已收订金失败,'+sqlca.SQLErrText Goto ext End If Else //余额 Update u_saletask Set takeamt = takeamt + :arg_s_mx[ll_i].fpamt Where scid = :arg_s_mx[ll_i].scid And taskid = :arg_s_mx[ll_i].relid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新订单:'+arg_s_mx[ll_i].relbillcode+' 已收金额失败,'+sqlca.SQLErrText Goto ext End If End If ll_printid++ Insert Into u_bmsttake_fpmx (takeid, printid, relid, relbillcode, fpamt, fpdate, fpemp, scid, kind) Values (:arg_takeid, :ll_printid, :arg_s_mx[ll_i].relid, :arg_s_mx[ll_i].relbillcode, :arg_s_mx[ll_i].fpamt, getdate(), :publ_operator, :arg_s_mx[ll_i].scid, :arg_s_mx[ll_i].Kind); If sqlca.SQLCode <> 0 Then arg_msg = '插入应收帐分配明细失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Update U_Bmsttake Set fpamt = fpamt + :arg_s_mx[ll_i].fpamt Where takeid = :arg_takeid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新应收帐已分配金额失败,'+sqlca.SQLErrText Goto ext End If Next ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer del_fpamt (long arg_takeid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_fpamt Long ll_scid,ll_relid Int li_kind String ls_relbillcode Select fpamt,scid,relid,relbillcode,kind Into :ld_fpamt,:ll_scid,:ll_relid,:ls_relbillcode,:li_kind From u_bmsttake_fpmx Where takeid = :arg_takeid And printid = :arg_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询明细分配信息失败,'+sqlca.SQLErrText Goto ext End If If li_kind = 1 Then Update u_saletask Set takedamt = takedamt - :ld_fpamt Where scid = :ll_scid And taskid = :ll_relid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新订单:'+ls_relbillcode+' 已收订金失败,'+sqlca.SQLErrText Goto ext End If Else Update u_saletask Set takeamt = takeamt - :ld_fpamt Where scid = :ll_scid And taskid = :ll_relid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新订单:'+ls_relbillcode+' 已收金额失败,'+sqlca.SQLErrText Goto ext End If End If Update U_Bmsttake Set fpamt = fpamt - :ld_fpamt Where takeid = :arg_takeid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新应收帐已分配金额失败,'+sqlca.SQLErrText Goto ext End If Delete From u_bmsttake_fpmx Where takeid = :arg_takeid And printid = :arg_printid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '删除订单金额分配记录失败,'+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 on uo_musttake.create call super::create TriggerEvent( this, "constructor" ) end on on uo_musttake.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor; String str_optionvalue,arg_msg f_get_sys_option_value('139',str_optionvalue,arg_msg) uo_option_msttake_takeamt_secaudit = Long(str_optionvalue) f_get_sys_option_value('045',str_optionvalue,arg_msg) uo_option_m_msttake = Long(str_optionvalue) f_get_sys_option_value('391',str_optionvalue,arg_msg) uo_option_msttake_balc = Long(str_optionvalue) end event