$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 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 (long arg_scid, long arg_cusid, datetime arg_takedate, string arg_inrep, decimal arg_oriamt, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_outwareid, long arg_salebillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode) public function integer add_takerecmx (long arg_scid, long arg_takeid, string arg_billcode, datetime arg_takedate, long arg_banktypeid, decimal arg_msttakeamt, decimal arg_takeamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_salebillid, long arg_itemid, long arg_cusid, long arg_moneyid, ref string arg_msg, boolean arg_ifcommit, string arg_relcode) public function integer add_takerec (ref s_bmsttake arg_s_mx, ref string arg_msg, boolean arg_ifcommit) public function integer add_takerecmx (ref s_bmsttake arg_s_mx, 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:收入单删除;3:销售单删除 Int rslt = 1 long cnt = 0 Long buildtype = 0 Decimal msttakeamt,takeamt 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 INTO :buildtype,:msttakeamt,:takeamt 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, finishflag = 0, finishdate = :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 deltakeid[] Long cusid[],ll_cusid,scid[],ll_scid Long ls_takeid,ls_listno,i Int rslt = 1 it_mxt = 0 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; 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 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,li_finishflag long cnt = 0 Long maxid = 0 Long buildtype = 0 Long ll_buildtype Long ll_ctmint Decimal ls_msttakeamt,ls_takeamt Long ll_itemid,ll_dateint DateTime ld_ctdatetime,ld_takedate uo_iteminput uo_item uo_item = Create uo_iteminput 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 INTO :ll_buildtype, :ls_msttakeamt, :ls_takeamt, :ll_itemid, :ll_dateint, :ld_takedate, :ll_ctmint, :li_finishflag 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 (ll_buildtype = 1 Or ll_buildtype = 4) And arg_del = 0 THEN arg_msg = '系统自动建立的应收帐不可以手动删除' rslt = 0 GOTO ext END IF cnt = 0 IF ll_buildtype = 0 THEN //手动建立的, SELECT count(*) INTO :cnt FROM u_bmsttakemx WHERE takeid = :arg_takeid And (buildtype <> 0); ELSEIF ll_buildtype = 1 THEN //销售单据建立 SELECT count(*) INTO :cnt FROM u_bmsttakemx WHERE takeid = :arg_takeid And (buildtype <> 1 And buildtype <> 3); ELSEIF ll_buildtype = 4 THEN //收款单据建立 SELECT count(*) INTO :cnt FROM u_bmsttakemx WHERE takeid = :arg_takeid And (buildtype <> 4); ELSE SELECT count(*) INTO :cnt FROM u_bmsttakemx WHERE takeid = :arg_takeid And (buildtype = 2); END IF 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 sys_option_msttake_takeamt_secaudit = 0 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 END IF DELETE U_bmstTAKEmx Where takeid = :arg_takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstTAKE Where 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 RETURN rslt end function public function integer add_takerec (long arg_scid, long arg_cusid, datetime arg_takedate, string arg_inrep, decimal arg_oriamt, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_outwareid, long arg_salebillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode);s_bmsttake s_take s_take.scid = arg_scid s_take.cusid = arg_cusid s_take.takedate = arg_takedate s_take.inrep = arg_inrep s_take.oriamt = arg_oriamt s_take.msttakeamt = arg_msttakeamt s_take.takeamt_cn = arg_takeamt s_take.takeamt = arg_takeamt s_take.dscrp = arg_dscrp s_take.billcode = arg_billcode s_take.banktypeid = arg_banktypeid s_take.buildtype = arg_buildtype s_take.opemp = arg_opemp s_take.outwareid = arg_outwareid s_take.salebillid = arg_salebillid s_take.viewdate = arg_viewdate s_take.accountsid = arg_accountsid s_take.itemid = arg_itemid s_take.moneyid = arg_moneyid // s_take.moneyid_cn = arg_ll_moneyid_account s_take.relcode = arg_relcode return add_takerec(s_take,arg_msg,arg_ifcommit) end function public function integer add_takerecmx (long arg_scid, long arg_takeid, string arg_billcode, datetime arg_takedate, long arg_banktypeid, decimal arg_msttakeamt, decimal arg_takeamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_salebillid, long arg_itemid, long arg_cusid, long arg_moneyid, ref string arg_msg, boolean arg_ifcommit, string arg_relcode);s_bmsttake s_take s_take.scid = arg_scid s_take.takeid = arg_takeid s_take.billcode = arg_billcode s_take.takedate = arg_takedate s_take.banktypeid = arg_banktypeid s_take.msttakeamt = arg_msttakeamt s_take.takeamt = arg_takeamt s_take.opemp = arg_opemp s_take.dscrp = arg_dscrp s_take.inrep = arg_inrep s_take.buildtype = arg_buildtype s_take.salebillid = arg_salebillid s_take.itemid = arg_itemid s_take.cusid = arg_cusid s_take.moneyid = arg_moneyid s_take.relcode = arg_relcode //s_take.oriamt = arg_oriamt //s_take.outwareid = arg_outwareid //s_take.viewdate = arg_viewdate //s_take.accountsid = arg_accountsid return add_takerecmx(s_take,arg_msg,arg_ifcommit) end function public function integer add_takerec (ref s_bmsttake arg_s_mx, ref string arg_msg, boolean arg_ifcommit);//arg_s_mx.buildtype = 0 - 手动;1 -自动;2-对单; 3-项目;4-收付款单; (2,3只用在明细中) Int rslt = 1 long cnt = 0 DateTime server_datetime Long ls_newtakeid Long ref_dateint String ls_cusname, ls_custype, ls_dscrp, ls_cuscode String ls_relcode Int li_item_dfttype,li_itemflag Decimal ld_takeamt IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = '' IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = '' IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0 IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = '' IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = '' IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0 IF IsNull(arg_s_mx.accountsid) THEN arg_s_mx.accountsid = 0 IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0 IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0 IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = '' //IF Len(arg_s_mx.dscrp) > 255 THEN arg_s_mx.dscrp = Left(arg_s_mx.dscrp, 255) uo_iteminput uo_item uo_item = Create uo_iteminput //未注册限制 IF sys_if_register = 0 THEN Long ll_bill_count SELECT count(*) INTO :ll_bill_count From U_Bmsttake; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,应收帐数量 " GOTO ext END IF IF ll_bill_count > 80 THEN rslt = 0 arg_msg = "未注册版本,应收帐只能保存80条记录!" GOTO ext END IF END IF IF Not (arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 1 Or arg_s_mx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-收款单记帐' rslt = 0 GOTO ext END IF IF arg_s_mx.moneyid <= 0 THEN rslt = 0 arg_msg = '请选择币种.' GOTO ext END IF IF arg_s_mx.banktypeid = 0 THEN arg_msg = '没有结算方式' rslt = 0 GOTO ext END IF IF arg_s_mx.itemid = 0 THEN arg_msg = '没有收支项目' rslt = 0 GOTO ext END IF IF arg_s_mx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_mx.TAKEdate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_mx.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_mx.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 Int li_btype,li_native SELECT btype Into :li_btype From cw_banktype Where banktypeid = :arg_s_mx.banktypeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式失败!' GOTO ext END IF SELECT native Into :li_native From cw_currency Where moneyid = :arg_s_mx.moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询币种失败!' GOTO ext END IF IF arg_s_mx.outwareid > 0 And arg_s_mx.buildtype = 1 THEN SELECT part Into :ls_relcode From u_outware Where outwareid = :arg_s_mx.outwareid; IF sqlca.SQLCode <> 0 THEN ls_relcode = '' END IF 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 arg_s_mx.mstTAKEamt = 0 And arg_s_mx.TAKEamt = 0 THEN arg_msg = "应收金额与已收金额不能同时为0!" rslt = 0 GOTO ext END IF arg_s_mx.oriamt = arg_s_mx.mstTAKEamt - arg_s_mx.TAKEamt //当前会计分录的金额, 如果是现金结算则为0 //2 判断是否已经选择当前客户和操作员 SELECT cuscode,name, custype INTO :ls_cuscode, :ls_cusname, :ls_custype FROM u_cust Where u_cust.cusid = :arg_s_mx.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_mx.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 //加出纳帐**************** DateTime ldt_viewdate IF sys_option_msttake_takeamt_secaudit = 0 THEN IF arg_s_mx.TAKEamt <> 0 THEN IF arg_s_mx.accountsid = 0 THEN arg_msg = '请选择账号' rslt = 0 GOTO ext END IF SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :arg_s_mx.itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前收支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF CHOOSE CASE li_item_dfttype CASE 1,3,4 ld_takeamt = arg_s_mx.takeamt_cn * li_itemflag CASE ELSE ld_takeamt = arg_s_mx.takeamt_cn END CHOOSE //客户收款单的选项, 暂时无法区别是否客户收款单? //不过其他单据,默认TAKEdate = viewdate IF sys_option_cusamt_dftdate = 0 THEN ldt_viewdate = arg_s_mx.TAKEdate ELSE ldt_viewdate = arg_s_mx.viewdate END IF //Int sys_option_rap_money_dscrp_mode= 0 // 281 出纳帐摘要生成模式 IF sys_option_rap_money_dscrp_mode = 0 THEN ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+arg_s_mx.dscrp ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN ls_dscrp = ls_cusname + ' '+arg_s_mx.dscrp ELSE ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+arg_s_mx.dscrp END IF s_iteminput s_input s_input.itemid = arg_s_mx.itemid s_input.dateint = 0 s_input.outdate = ldt_viewdate s_input.dscrp = ls_dscrp s_input.outamt = ld_takeamt s_input.accountsid = arg_s_mx.accountsid s_input.banktypeid = arg_s_mx.banktypeid s_input.billcode = arg_s_mx.billcode s_input.relcode = arg_s_mx.relcode s_input.buildtype = 1 s_input.opemp = publ_operator s_input.relrep = '' s_input.scid = arg_s_mx.scid s_input.moneyid = arg_s_mx.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 ELSE arg_s_mx.accountsid = 0 END IF ELSE arg_s_mx.accountsid = 0 END IF //----------------------------------------------------------------------- ls_newtakeid = f_sys_scidentity(0,"U_Bmsttake","takeid",arg_msg,False,sqlca) IF ls_newtakeid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO U_Bmsttake ( scid, takeid, CUSid, TAKEdate, inrep, oriamt, mstTAKEamt, takeamt, Dscrp, billcode, banktypeid, buildtype, opdate, opemp, outwareid, salebillid, viewdate, accountsid, rapmoneyid, itemid, moneyid, relcode) VALUES ( :arg_s_mx.scid, :ls_newtakeid, :arg_s_mx.CUSid, :arg_s_mx.TAKEdate, :arg_s_mx.inrep, :arg_s_mx.oriamt, :arg_s_mx.mstTAKEamt, :arg_s_mx.TAKEamt, :arg_s_mx.dscrp, :arg_s_mx.billcode, :arg_s_mx.banktypeid, :arg_s_mx.buildtype, :server_datetime, :arg_s_mx.opemp, :arg_s_mx.outwareid, :arg_s_mx.salebillid, :arg_s_mx.viewdate, :arg_s_mx.accountsid, :ref_dateint, :arg_s_mx.itemid, :arg_s_mx.moneyid, :arg_s_mx.relcode) ; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmsttake') > 0 THEN arg_msg = '向应收帐表插入应收记录失败,关键字ID重复' ELSE arg_msg = "向应收帐表插入应收记录失败"+"~n"+sqlca.SQLErrText END IF rslt = 0 GOTO ext END IF arg_s_mx.takeid = ls_newtakeid s_bmsttake s_takemx s_takemx = arg_s_mx IF arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 4 THEN s_takemx.buildtype = arg_s_mx.buildtype ELSE s_takemx.buildtype = 1 END IF s_takemx.salebillid = 0 IF add_takerecmx(s_takemx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ref_takeid = ls_newtakeid ext: Destroy uo_item IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_takerecmx (ref s_bmsttake arg_s_mx, 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_mx.dscrp) THEN arg_s_mx.dscrp = '' IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = '' IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0 IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = '' IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = '' IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0 IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0 IF IsNull(arg_s_mx.cusid) THEN arg_s_mx.cusid = 0 IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0 IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = '' //防止超长 arg_s_mx.billcode = lefta(arg_s_mx.billcode, 30) cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_mx.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_mx.buildtype = 0 Or & arg_s_mx.buildtype = 1 Or & arg_s_mx.buildtype = 2 Or & arg_s_mx.buildtype = 3 Or & arg_s_mx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-收款单记帐' rslt = 0 GOTO ext END IF IF arg_s_mx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_mx.TAKEdate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_mx.inrep) = '' THEN arg_s_mx.inrep = '无' END IF IF arg_s_mx.banktypeid = 0 THEN arg_msg = '没有结算方式' rslt = 0 GOTO ext END IF //2019 04 09 因 财务》应收帐:放宽限制 屏蔽 //IF arg_s_mx.mstTAKEamt = 0 And arg_s_mx.TAKEamt = 0 THEN // arg_msg = "应收金额与已收金额不能同时为0!" // rslt = 0 // GOTO ext //END IF //2 判断是否已经选择当前操作员 cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_s_mx.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_mx.mstTAKEamt <>0 or arg_s_mx.TAKEamt<>0 then //明细不插入不参与计算的单据 IF arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 2 Or arg_s_mx.buildtype = 3 Or arg_s_mx.buildtype = 4 THEN SELECT max(listno) + 1 INTO :List_no FROM u_bmsttakemx Where takeid = :arg_s_mx.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 ELSE list_no = 0 END IF //3 向应收帐明细表插入新记录,失败则回滚 INSERT INTO U_Bmsttakemx ( scid, takeid, Listno, billcode, TAKEdate, banktypeid, mstTAKEamt, TAKEamt, opdate, opemp, Dscrp, inrep, buildtype, salebillid, itemid, cusid, moneyid, relcode) VALUES ( :arg_s_mx.scid, :arg_s_mx.takeid, :list_no, :arg_s_mx.billcode, :arg_s_mx.takedate, :arg_s_mx.banktypeid, :arg_s_mx.mstTAKEamt, :arg_s_mx.TAKEamt, :server_datetime, :arg_s_mx.opemp, :arg_s_mx.dscrp, :arg_s_mx.inrep, :arg_s_mx.buildtype, :arg_s_mx.salebillid, :arg_s_mx.itemid, :arg_s_mx.cusid, :arg_s_mx.moneyid, :arg_s_mx.relcode) ; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmsttakemx') > 0 THEN arg_msg = '向应收帐表插入应收明细帐记录失败,关键字ID重复' ELSE arg_msg = "向应收帐表插入应收明细帐记录失败"+"~n"+sqlca.SQLErrText END IF rslt = 0 GOTO ext END IF end if SELECT mstTAKEamt - TAKEamt Into :balcamt From u_bmsttake Where takeid = :arg_s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前单据结余金额失败' rslt = 0 GOTO ext END IF IF arg_s_mx.buildtype = 3 THEN //销售单据, 增加税率应用 IF arg_s_mx.dscrp = arg_s_mx.billcode + '税金' THEN UPDATE u_bmsttake SET oriamt = oriamt + :arg_s_mx.msttakeamt Where takeid = :arg_s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐单据金额失败,请重试!' rslt = 0 GOTO ext END IF END IF END IF IF list_no <> 0 and (arg_s_mx.mstTAKEamt <>0 or arg_s_mx.TAKEamt<>0)THEN UPDATE u_bmsttake SET msttakeamt = msttakeamt + :arg_s_mx.msttakeamt, takeamt = takeamt + :arg_s_mx.takeamt Where takeid = :arg_s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐应收已收款失败,请重试!' rslt = 0 GOTO ext END IF END IF IF balcamt = arg_s_mx.TAKEamt - arg_s_mx.mstTAKEamt THEN UPDATE u_bmsttake SET finishflag = 1, finishdate = :arg_s_mx.takedate Where takeid = :arg_s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐完成标记失败' rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmsttake SET finishflag = 0, finishdate = :null_datetime Where takeid = :arg_s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应收帐完成标记失败' 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_musttake.create call super::create TriggerEvent( this, "constructor" ) end on on uo_musttake.destroy TriggerEvent( this, "destructor" ) call super::destroy end on