$PBExportHeader$uo_bmstamt.sru forward global type uo_bmstamt from nonvisualobject end type end forward global type uo_bmstamt from nonvisualobject end type global uo_bmstamt uo_bmstamt type variables PUBLIC PROTECTEDWRITE Long Baid //自动增量id PUBLIC PROTECTEDWRITE String BaCode //罚款单的唯一编号 PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动 PUBLIC PROTECTEDWRITE String opemp //建立人 PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动 PUBLIC PROTECTEDWRITE String modemp //修改人 PUBLIC PROTECTEDWRITE Int flag = 0 //审核标志 PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间 PUBLIC PROTECTEDWRITE String auditingrep //审核操作员 PUBLIC PROTECTEDWRITE Int confirmflag = 0 //确认标志 PUBLIC PROTECTEDWRITE DateTime confirmdate //确认时间 PUBLIC PROTECTEDWRITE String confirmemp //确认人 PUBLIC PROTECTEDWRITE Int secflag = 0 //审核标志 PUBLIC PROTECTEDWRITE DateTime secdate //审核时间 PUBLIC PROTECTEDWRITE String secemp //审核操作员 Long banktypeid Long scid Long cusid Long accountid DateTime BaDate Decimal Bmstamt, Bmstamt_mxsum decimal Zqamt, Zqamt_mxsum String dscrp Int billtype //0-收客户款; 1-付供应商款; 2-退客户款; 3-供应商退款 Long itemid Long relid //记录主表的应收帐相关takeid Long reldateint String BaRep Long moneyid Decimal mrate DateTime viewdate string relcode string fpcode Int cwauditingflag = 0 //总账审核标记 DateTime cwauditingdate //总账审核时间 String cwauditingrep //总账审核操作员 PRIVATE: Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE//修改标志 S_BmstamtMX BmstamtMX[] Long it_MXBT = 0 end variables forward prototypes public function integer p_reset () public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer newbegin (long arg_scid, ref string arg_msg) public function integer del (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer confirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer cconfirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_Baid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer secauditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer c_secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_cust (long arg_billid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (s_bmstamtmx s_mx, ref string arg_msg) public function integer p_clearmx () public function integer uof_acceptmx_chk (s_bmstamtmx s_mx, ref string arg_msg) public function integer auditing_cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_auditing_end (ref string arg_msg) public function integer uof_auditing_cancel_end (ref string arg_msg) public function integer uof_secauditing_end (ref string arg_msg) public function integer uof_secauditing_cancel_end (ref string arg_msg) public function integer audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function long getinfo (long arg_billid, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 banktypeid = 0 Baid = 0 BaCode = '' opemp = '' auditingrep = '' flag = 0 cusid = 0 Bmstamt = 0 Zqamt = 0 Bmstamt_mxsum = 0 Zqamt_mxsum = 0 dscrp = '' itemid = 0 billtype = 0 BaRep = '' moneyid = 0 accountid = 0 scid = 0 p_clearmx() it_newbegin = FALSE it_updatebegin = FALSE RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode Long ll_moneyid_account IF IsNull(cusid) THEN cusid = 0 IF IsNull(accountid) THEN accountid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(Bmstamt) THEN Bmstamt = 0 IF IsNull(Zqamt) THEN Zqamt = 0 IF IsNull(scid) THEN scid = 0 IF IsNull(billtype) THEN billtype = 0 IF IsNull(itemid) THEN itemid = 0 IF IsNull(BaRep) THEN BaRep = '' IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(mrate) THEN mrate = 0 IF IsNull(relcode) THEN relcode = '' IF IsNull(fpcode) THEN fpcode = '' IF Not ( it_updatebegin Or it_newbegin) THEN rslt = 0 arG_MSG = "非编辑状态下不可用" GOTO ext END IF IF accountid = 0 THEN arG_MSG = '请选择帐号' rslt = 0 GOTO ext END IF SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :accountid; 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 Bmstamt_mxsum > Bmstamt THEN arG_MSG = '单据金额少于明细本次应收金额总和' rslt = 0 GOTO ext END IF IF Zqamt_mxsum <> Zqamt THEN arG_MSG = '单据折扣金额不等于明细本次折扣金额总和' rslt = 0 GOTO ext END IF IF billtype = 0 THEN IF sys_option_msttake_takeamt_secaudit = 0 THEN // IF cusid = 0 THEN arG_MSG = '请先选择客户' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_cust Where cusid = :cusid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询客户资料失败' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arG_MSG = '客户资料重复' rslt = 0 GOTO ext END IF END IF ELSE IF cusid = 0 THEN arG_MSG = '请先选择供应商' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt Where sptid = :cusid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询供应商资料失败' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arG_MSG = '供应商资料重复' rslt = 0 GOTO ext END IF END IF IF moneyid = 0 THEN arG_MSG = '请选择币种' rslt = 0 GOTO ext END IF IF mrate <= 0 THEN arG_MSG = '请输入币种汇率' rslt = 0 GOTO ext END IF IF moneyid <> ll_moneyid_account And mrate = 1 THEN arG_MSG = '收款币种与帐号币种不相同,汇率不能设为1' rslt = 0 GOTO ext END IF IF moneyid = ll_moneyid_account And mrate <> 1 THEN arG_MSG = '收款币种与帐号币种相同,汇率要设为1' rslt = 0 GOTO ext END IF IF f_check_inoutdate(0,BaDate,False,arg_msg) = 0 THEN rslt = 0 arg_msg = "该单据超出指定日期范围(单据限制录入天数)" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_itemdef Where itemid = :itemid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询项目资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt <> 1 THEN arG_MSG = '项目资料不存在或重复' rslt = 0 GOTO ext END IF //20100426 Long ll_itemflag SELECT itemflag INTO :ll_itemflag FROM u_itemdef Where itemid = :itemid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询项目资料核算方向失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF billtype = 0 And ll_itemflag = -1 THEN arG_MSG = '客户收款结算单,不能选择核算支出方向的收支项目' rslt = 0 GOTO ext END IF IF billtype = 1 And ll_itemflag = 1 THEN arG_MSG = '供应商付款结算单,不能选择核算收入方向的收支项目' rslt = 0 GOTO ext END IF IF banktypeid = 0 THEN arG_MSG = '没有结算方式' rslt = 0 GOTO ext END IF IF Bmstamt = 0 THEN arG_MSG = '请输入正确的金额' rslt = 0 GOTO ext 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 IF Year(Date(BaDate)) < 2000 Or IsNull(BaDate) THEN rslt = 0 arG_MSG = "时间不合理" GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF it_newbegin THEN //新建 ls_newid = f_sys_scidentity(0,"u_Bmstamt","Baid",arG_MSG,True,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(0,sqlca,ls_sccode,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN //客户收款结算单 BaCode = getid(0,ls_sccode + "CB",Date(server_dt),True,sqlca) //取得新单据编号 ELSE //供应商付款结算单 BaCode = getid(0,ls_sccode + "SB",Date(server_dt),True,sqlca) //取得新单据编号 END IF IF BaCode = "err" THEN BaCode = '' rslt = 0 arG_MSG = "无法获取单据编号" GOTO ext END IF INSERT INTO u_Bmstamt ( scid, Baid, BaCode, BaDate, cusid, Bmstamt, dscrp, opdate, opemp, accountid, banktypeid, billtype, itemid, BaRep, moneyid, mrate, viewdate, relcode, fpcode, Zqamt) VALUES ( :scid, :ls_newid, :BaCode, :BaDate, :cusid, :Bmstamt, :dscrp, getdate(), :publ_operator, :accountid, :banktypeid, :billtype, :itemid, :BaRep, :moneyid, :mrate, :viewdate, :relcode, :fpcode, :Zqamt); IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "插入单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF Baid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_Bmstamt SET BaDate = :BaDate, cusid = :cusid, Bmstamt = :Bmstamt, Zqamt = :Zqamt, dscrp = :dscrp, opdate = getdate(), opemp = :publ_operator, BaCode = :BaCode, scid = :scid, accountid = :accountid, banktypeid = :banktypeid, itemid = :itemid, BaRep = :BaRep, moneyid = :moneyid, mrate = :mrate, viewdate = :viewdate, relcode = :relcode, fpcode = :fpcode, modemp = :publ_operator, moddate = getdate() Where Baid = :Baid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arG_MSG = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_Bmstamtmx Where u_Bmstamtmx.Baid = :Baid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO u_Bmstamtmx (Baid, printid, scid, takeid, takedate, msttakeamt, takeamt, Zqamt, Ttakeamt, TZqamt, billid, billcode, relid, relcode, relprintid, mxdscrp) VALUES (:Baid, :BmstamtMX[i].printid, :scid, :BmstamtMX[i].takeid, :BmstamtMX[i].takedate, :BmstamtMX[i].msttakeamt, :BmstamtMX[i].takeamt, :BmstamtMX[i].Zqamt, :BmstamtMX[i].Ttakeamt, :BmstamtMX[i].TZqamt, :BmstamtMX[i].billid, :BmstamtMX[i].billcode, :BmstamtMX[i].relid, :BmstamtMX[i].relcode, :BmstamtMX[i].relprintid, :BmstamtMX[i].mxdscrp); IF sqlca.SQLCode <> 0 THEN IF it_newbegin THEN Baid = 0 rslt = 0 if pos(sqlca.sqlerrtext, 'IX_u_Bmstamtmx') > 0 then arg_msg = "插入明细操作失败,存在重复的凭证"+"~n"+sqlca.SQLErrText else arG_MSG = "插入明细操作失败"+"~n"+sqlca.SQLErrText end if GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_clearmx() ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: updatebegin(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_billid <= 0 THEN Baid = 0 arg_msg = '错误的单据ID' GOTO ext END IF SELECT u_Bmstamt.Baid, u_Bmstamt.BaCode, u_Bmstamt.cusid, u_Bmstamt.Bmstamt, u_Bmstamt.dscrp , u_Bmstamt.BaDate, u_Bmstamt.scid, u_Bmstamt.accountid, u_Bmstamt.flag Into :Baid, :BaCode, :cusid, :Bmstamt, :dscrp, :BaDate, :scid, :accountid, :flag From u_Bmstamt Where Baid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询数据操作失败,单据'+sqlca.SQLErrText GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF Baid = arg_billid scid = arg_scid it_newbegin = False it_updatebegin = True p_clearmx() //清除明细 ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer newbegin (long arg_scid, ref string arg_msg);Int rslt = 1 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF p_reset() scid = arg_scid it_newbegin = True it_updatebegin = False ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_scid, long arg_billid, ref string arg_msg);//==================================================================== // Function: del(arg_billid,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "没有删除对象,操作取消" GOTO ext END IF IF it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行,操作取消" GOTO ext END IF SELECT u_Bmstamt.flag, confirmflag INTO :flag, :confirmflag FROM u_Bmstamt Where u_Bmstamt.Baid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询收款单操作失败' GOTO ext END IF IF confirmflag = 1 THEN rslt = 0 arg_msg = "单据已经确认,不可以删除" GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE FROM u_Bmstamt Where u_Bmstamt.Baid = :arg_billid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_Bmstamtmx Where u_Bmstamtmx.Baid = :arg_billid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSE COMMIT; END IF Return (rslt) end function public function integer auditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit); Long cnt = 0 Long i Int rslt = 1 Long ref_rapid Long ref_dateint String ls_name String ls_dscrp IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审核' GOTO ext END IF IF billtype = 0 And sys_option_msttake_takeamt_secaudit = 0 THEN UPDATE u_Bmstamt SET auditemp = :publ_operator, auditdate = getdate(), flag = 1, secemp = :publ_operator, secdate = getdate(), secflag = 1 WHERE u_Bmstamt.Baid = :arg_billid And flag = 0; ELSE UPDATE u_Bmstamt SET auditemp = :publ_operator, auditdate = getdate(), flag = 1 WHERE u_Bmstamt.Baid = :arg_billid And flag = 0; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "审核单据操作失败,"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询,"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_auditing_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer confirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0 Int rslt = 1 IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //IF flag = 0 THEN // rslt = 0 // arg_msg = '单据未审核,不可以确认' // GOTO ext //END IF IF confirmflag = 1 THEN rslt = 0 arg_msg = '单据已确认,不可以确认' GOTO ext END IF UPDATE u_Bmstamt SET confirmemp = :publ_operator, confirmdate = getdate(), confirmflag = 1 WHERE u_Bmstamt.Baid = :arg_billid AND confirmflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "确认单据操作失败,"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在确认,请稍后查询,"+"~n"+sqlca.SQLErrText GOTO ext END IF confirmflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer cconfirm (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0 Int rslt = 1 datetime null_dt setnull(null_dt) IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF confirmflag = 0 THEN rslt = 0 arg_msg = '单据未确认,不可以反确认' GOTO ext END IF UPDATE u_Bmstamt SET confirmemp = '', confirmdate = :null_dt, confirmflag = 0 WHERE u_Bmstamt.Baid = :arg_billid AND confirmflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "反确认单据操作失败,"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在反确认,请稍后查询,"+"~n"+sqlca.SQLErrText GOTO ext END IF confirmflag = 0 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_Baid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart) //0 fail 1 SUCCESS Int rslt = 1 arg_newdescppart = Trim(arg_newdescppart) IF it_updatebegin OR it_newbegin THEN rslt = 0 arG_MSG = "编辑状态下不可用" GOTO ext END IF IF getinfo(arg_Baid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arG_MSG = "非审核状态下不可用" GOTO ext END IF UPDATE u_Bmstamt SET DSCRP = ltrim(rtrim(DSCRP))+' '+:arg_newdescppart Where u_Bmstamt.Baid = :arg_Baid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "添加单据备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF DSCRP = DSCRP+' '+arg_newdescppart ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer secauditing (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据未初审,不可以终审' GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以再审核' GOTO ext END IF UPDATE u_Bmstamt SET secemp = :publ_operator, secdate = getdate(), secflag = 1 WHERE u_Bmstamt.Baid = :arg_billid AND flag = 1 AND secflag = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "最终审核单据操作失败,"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询,"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_secauditing_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 secflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 DateTime null_dt SetNull(null_dt) IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag = 0 THEN rslt = 0 arg_msg = '单据未审核,不可以再撤审' GOTO ext END IF UPDATE u_Bmstamt SET secemp = '', secdate = :null_dt, secflag = 0 WHERE u_Bmstamt.Baid = :arg_billid And secflag = 1 And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "撤审单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_secauditing_cancel_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 secflag = 0 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF //DESTROY uo_take RETURN rslt end function public function integer uof_update_cust (long arg_billid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据未初审,不可以操作' GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = '单据已终审,不可以再操作' GOTO ext END IF IF billtype <> 0 THEN arg_msg = '不是客户收款结算单,不能操作' rslt = 0 GOTO ext END IF UPDATE u_Bmstamt SET cusid = :arg_cusid WHERE u_Bmstamt.Baid = :arg_billid AND flag = 1 AND secflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "单据客户资料操作失败,"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在更新单据客户资料,请稍后查询,"+"~n"+sqlca.SQLErrText GOTO ext END IF cusid = arg_cusid ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer acceptmx (s_bmstamtmx s_mx, ref string arg_msg); Long rslt = 1 DateTime ldt_takedate String ls_billcode, ls_relcode IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(s_mx.printid) THEN s_mx.printid = 0 IF IsNull(s_mx.takeid) THEN s_mx.takeid = 0 IF IsNull(s_mx.billcode) THEN s_mx.billcode = '' IF IsNull(s_mx.relcode) THEN s_mx.relcode = '' IF IsNull(s_mx.msttakeamt) THEN s_mx.msttakeamt = 0 IF IsNull(s_mx.takeamt) THEN s_mx.takeamt = 0 IF IsNull(s_mx.zqamt) THEN s_mx.zqamt = 0 IF IsNull(s_mx.ttakeamt) THEN s_mx.ttakeamt = 0 IF IsNull(s_mx.tzqamt) THEN s_mx.tzqamt = 0 IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = '' IF IsNull(s_mx.relid) THEN s_mx.relid = 0 IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0 IF s_mx.takeid = 0 Or (s_mx.ttakeamt = 0 And s_mx.tzqamt = 0) THEN rslt = 1 GOTO ext END IF IF billtype = 0 THEN IF s_mx.ttakeamt + s_mx.tzqamt > s_mx.msttakeamt - s_mx.takeamt THEN arg_msg = "行:"+String(s_mx.printid)+",本次收款金额+本次折扣金额>未收金额" rslt = 0 GOTO ext END IF SELECT takedate, billcode, relcode INTO :ldt_takedate, :ls_billcode, :ls_relcode FROM U_Bmsttake Where takeid = :s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询明细对应的应收帐信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE IF Abs(s_mx.ttakeamt + s_mx.tzqamt) > Abs(s_mx.msttakeamt - s_mx.takeamt) THEN arg_msg = "行:"+String(s_mx.printid)+",本次付款金额+本次折扣金额>未付金额" rslt = 0 GOTO ext END IF SELECT paydate, billcode, relcode INTO :ldt_takedate, :ls_billcode, :ls_relcode FROM U_Bmstpay Where payid = :s_mx.takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询明细对应的应付帐信息失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF //ls_relcode = "" END IF IF uof_acceptmx_chk(s_mx, arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //写入内容 it_mxbt++ BmstamtMX[it_mxbt].printid = it_mxbt BmstamtMX[it_mxbt].takeid = s_mx.takeid BmstamtMX[it_mxbt].billcode = ls_billcode BmstamtMX[it_mxbt].relcode = ls_relcode BmstamtMX[it_mxbt].takedate = ldt_takedate BmstamtMX[it_mxbt].msttakeamt = s_mx.msttakeamt BmstamtMX[it_mxbt].takeamt = s_mx.takeamt BmstamtMX[it_mxbt].zqamt = s_mx.zqamt BmstamtMX[it_mxbt].ttakeamt = s_mx.ttakeamt BmstamtMX[it_mxbt].tzqamt = s_mx.tzqamt BmstamtMX[it_mxbt].relid = s_mx.relid BmstamtMX[it_mxbt].relprintid = s_mx.relprintid BmstamtMX[it_mxbt].mxdscrp = s_mx.mxdscrp Bmstamt_mxsum += s_mx.ttakeamt Zqamt_mxsum += s_mx.tzqamt ext: IF rslt = 0 THEN p_clearmx() END IF Return(rslt) end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 Bmstamt_mxsum = 0 Zqamt_mxsum = 0 return 1 end function public function integer uof_acceptmx_chk (s_bmstamtmx s_mx, ref string arg_msg);Int rslt = 1 GOTO ext ext: RETURN rslt end function public function integer auditing_cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long cnt = 0 Long i Int rslt = 1 Long ref_rapid DateTime null_dt SetNull(null_dt) IF getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 0 THEN rslt = 0 arg_msg = '单据未审核,不可以再撤审' GOTO ext END IF IF billtype = 0 AND sys_option_msttake_takeamt_secaudit = 0 THEN UPDATE u_Bmstamt SET auditemp = '', auditdate = :null_dt, flag = 0, secemp = '', secdate = :null_dt, secflag = 0 WHERE u_Bmstamt.Baid = :arg_billid AND flag = 1; ELSE UPDATE u_Bmstamt SET auditemp = '', auditdate = :null_dt, flag = 0 WHERE Baid = :arg_billid AND flag = 1 And secflag = 0; END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "撤审单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在撤审,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF IF uof_auditing_cancel_end(arg_msg) = 0 THEN rslt = 0 GOTO ext END IF flag = 0 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_auditing_end (ref string arg_msg);Long rslt = 1 Long ll_relid_ref Long i Long ll_itemid Long ref_dateint Decimal lde_oriamt, lde_msttakeamt, lde_takeamt String ls_about DateTime ldt_zqdate String ls_dscrp,ls_cuscode, ls_cusname, ls_custype uo_musttake uo_take uo_take = Create uo_musttake uo_salebill uo_bill_s uo_bill_s = Create uo_salebill uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_buybill uo_bill_b uo_bill_b = Create uo_buybill uo_iteminput uo_item uo_item = Create uo_iteminput DateTime ld_viewdate SetNull(ld_viewdate) Int li_item_dfttype,li_itemflag Decimal ld_takeamt Long ll_moneyid_account ls_dscrp = dscrp IF Trim(fpcode) <> '' THEN ls_dscrp = ls_dscrp + ' 发票号:'+fpcode END IF IF billtype = 0 THEN //生成客户收款, 对单 IF sys_option_msttake_takeamt_secaudit = 0 THEN //两审一起进行,生成应收,出纳, 对单 //1.生成已收帐 SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :accountid; 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 s_bmsttake s_take s_take.scid = scid s_take.cusid = cusid s_take.takedate = BaDate s_take.inrep = BaRep s_take.oriamt = 0 - Bmstamt s_take.msttakeamt = 0 s_take.takeamt = Bmstamt * mrate s_take.dscrp = ls_dscrp s_take.billcode = BaCode s_take.banktypeid = banktypeid s_take.buildtype = 4 s_take.opemp = publ_operator s_take.outwareid = 0 s_take.salebillid = 0 s_take.viewdate = viewdate s_take.accountsid = accountid s_take.itemid = itemid s_take.moneyid = moneyid s_take.relcode = relcode s_take.takeamt_cn = Bmstamt s_take.moneyid_cn = ll_moneyid_account IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ll_relid_ref = uo_take.ref_takeid IF ll_relid_ref = 0 THEN arg_msg = '错误的应收应付帐ID!' rslt = 0 GOTO ext END IF UPDATE u_Bmstamt SET relid = :ll_relid_ref WHERE Baid = :Baid And flag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新单据资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF it_mxbt > 0 THEN //2.明细生成折扣金额(优惠款) IF f_get_itemid(3, ll_itemid, arg_msg) = 0 THEN //查询默认销售优惠款项目 rslt = 0 GOTO ext END IF Bmstamt_mxsum = 0 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" IF sys_option_bmstamt_zqamt_date = 0 THEN ldt_zqdate = BaDate ELSE SELECT takedate INTO :ldt_zqdate FROM u_Bmsttake Where scid = :scid And takeid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应收帐发生日期信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF uo_take.add_takerecmx(scid,BmstamtMX[i].takeid,BaCode,ldt_zqdate,banktypeid,0 - BmstamtMX[i].tzqamt,0,& publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, moneyid,arg_msg,False,relcode) = 0 THEN rslt = 0 GOTO ext END IF END IF IF BmstamtMX[i].ttakeamt <> 0 THEN Bmstamt_mxsum += BmstamtMX[i].ttakeamt END IF NEXT //3.明细(扣除折扣金额)与当前已收帐对单 IF uo_bill_s.newbegin() = 0 THEN arg_msg = '初始化对单失败' rslt = 0 GOTO ext END IF uo_bill_s.opemp = publ_operator uo_bill_s.takedate = BaDate uo_bill_s.relcode = BaCode uo_bill_s.inrep = publ_operator uo_bill_s.banktypeid = banktypeid uo_bill_s.dscrp = '客户收款结算单自动生成' uo_bill_s.cusid = cusid uo_bill_s.msttakeamt = 0 uo_bill_s.takeamt = 0 uo_bill_s.accountsid = accountid uo_bill_s.itemid = itemid uo_bill_s.buildtype = 1 uo_bill_s.moneyid = moneyid // //插入收款明细 IF uo_bill_s.acceptmx(ll_relid_ref,& BaCode,& 0,& 0 - Bmstamt_mxsum,& 0 - Bmstamt,& 0,& Bmstamt,& BaCode,& arg_msg) = 0 THEN arg_msg = '对数单插入已收明细失败,'+arg_msg rslt = 0 GOTO ext END IF //插入应收明细 FOR i = 1 To it_mxbt IF BmstamtMX[i].ttakeamt <> 0 THEN SELECT oriamt, msttakeamt, takeamt INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt FROM U_Bmsttake Where takeid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(i)+'查询应收帐信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_s.acceptmx(BmstamtMX[i].takeid,& BmstamtMX[i].billcode,& 0,& BmstamtMX[i].ttakeamt,& lde_oriamt,& lde_msttakeamt,& lde_takeamt,& BmstamtMX[i].relcode,& arg_msg) = 0 THEN arg_msg = '对数单插入应收明细失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT IF uo_bill_s.save_ds(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE //IF sys_option_msttake_takeamt_secaudit = 0 THEN //初审出纳; 终审应收 SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :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 = Bmstamt * li_itemflag CASE ELSE ld_takeamt = Bmstamt END CHOOSE IF sys_option_cusamt_dftdate = 0 THEN ld_viewdate = BaDate ELSE ld_viewdate = viewdate END IF s_iteminput s_input SELECT cuscode,name, custype INTO :ls_cuscode, :ls_cusname, :ls_custype FROM u_cust Where u_cust.cusid = :cusid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询操作失败,客户唯一码' rslt = 0 GOTO ext END IF IF sys_option_rap_money_dscrp_mode = 0 THEN ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+ls_dscrp ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN ls_dscrp = ls_cusname + ' '+ls_dscrp ELSE ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+ls_dscrp END IF s_input.itemid = itemid s_input.dateint = 0 s_input.outdate = ld_viewdate s_input.dscrp = ls_dscrp s_input.outamt = ld_takeamt s_input.accountsid = accountid s_input.banktypeid = banktypeid s_input.billcode = BaCode s_input.relcode = relcode s_input.buildtype = 1 s_input.opemp = publ_operator s_input.relrep = '' s_input.scid = scid s_input.moneyid = 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_Bmstamt SET reldateint = :ref_dateint WHERE Baid = :Baid And flag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新单据收支帐ID资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 1 THEN //生成供应商付款, 对单 //1.生成已付帐 SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :accountid; 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 s_bmstpay s_pay s_pay.scid = scid s_pay.sptid = cusid s_pay.paydate = BaDate s_pay.inrep = BaRep s_pay.oriamt = 0 - Bmstamt * mrate s_pay.mstpayamt = 0 s_pay.payamt = Bmstamt * mrate s_pay.dscrp = ls_dscrp s_pay.billcode = BaCode s_pay.banktypeid = banktypeid s_pay.buildtype = 4 s_pay.opemp = publ_operator s_pay.inwareid = 0 s_pay.buybillid = 0 s_pay.accountsid = accountid s_pay.itemid = itemid s_pay.moneyid = moneyid s_pay.relcode = relcode s_pay.viewdate = viewdate s_pay.payamt_cn = Bmstamt IF uo_pay.add_payrec(s_pay,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ll_relid_ref = uo_pay.ref_payid IF ll_relid_ref = 0 THEN arg_msg = '错误的应收应付帐ID!' rslt = 0 GOTO ext END IF UPDATE u_Bmstamt SET relid = :ll_relid_ref WHERE Baid = :Baid And flag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新单据资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF it_mxbt > 0 THEN //2.明细生成折扣金额(优惠款) IF f_get_itemid(8, ll_itemid, arg_msg) = 0 THEN //查询默认采购优惠款项目 rslt = 0 GOTO ext END IF Bmstamt_mxsum = 0 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" IF sys_option_bmstamt_zqamt_date = 0 THEN ldt_zqdate = BaDate ELSE SELECT paydate INTO :ldt_zqdate FROM u_Bmstpay Where scid = :scid And payid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应付帐发生日期信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF uo_pay.add_payrecmx(scid,BmstamtMX[i].takeid,BaCode,BaDate,banktypeid,0 - BmstamtMX[i].tzqamt,0,& publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, arg_msg,False,moneyid,relcode) = 0 THEN rslt = 0 GOTO ext END IF END IF IF BmstamtMX[i].ttakeamt <> 0 THEN Bmstamt_mxsum += BmstamtMX[i].ttakeamt END IF NEXT //3.明细(扣除折扣金额)与当前已付帐对单 IF uo_bill_b.newbegin() = 0 THEN arg_msg = '初始化对单失败' rslt = 0 GOTO ext END IF uo_bill_b.opemp = publ_operator uo_bill_b.paydate = BaDate uo_bill_b.relcode = BaCode uo_bill_b.inrep = publ_operator uo_bill_b.banktypeid = banktypeid uo_bill_b.dscrp = '供应商付款结算单自动生成' uo_bill_b.sptid = cusid uo_bill_b.mstpayamt = 0 uo_bill_b.payamt = 0 uo_bill_b.accountsid = accountid uo_bill_b.itemid = itemid uo_bill_b.buildtype = 1 uo_bill_b.moneyid = moneyid // //插入付款明细 IF uo_bill_b.acceptmx(ll_relid_ref,& BaCode,& 0,& 0 - Bmstamt_mxsum,& 0 - Bmstamt,& 0,& Bmstamt,& BaCode,& arg_msg) = 0 THEN arg_msg = '对数单插入已付明细失败,'+arg_msg rslt = 0 GOTO ext END IF //插入应付明细 FOR i = 1 To it_mxbt IF BmstamtMX[i].ttakeamt <> 0 THEN SELECT oriamt, mstpayamt, payamt INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt FROM U_Bmstpay Where payid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(i)+'查询应付帐信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_b.acceptmx(BmstamtMX[i].takeid,& BmstamtMX[i].billcode,& 0,& BmstamtMX[i].ttakeamt,& lde_oriamt,& lde_msttakeamt,& lde_takeamt,& BmstamtMX[i].relcode,& arg_msg) = 0 THEN arg_msg = '对数单插入应付明细失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT IF uo_bill_b.save_ds(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF ext: Destroy uo_take Destroy uo_bill_s Destroy uo_pay Destroy uo_item RETURN rslt end function public function integer uof_auditing_cancel_end (ref string arg_msg);Long rslt = 1 Long ll_relid_ref Long i Long ll_itemid Decimal lde_oriamt, lde_msttakeamt, lde_takeamt Long ll_listno String ls_about uo_musttake uo_take uo_take = Create uo_musttake uo_salebill uo_bill_s uo_bill_s = Create uo_salebill uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_buybill uo_bill_b uo_bill_b = Create uo_buybill uo_iteminput uo_item uo_item = Create uo_iteminput //DateTime ld_viewdate //SetNull(ld_viewdate) //Int li_item_dfttype,li_itemflag //Decimal ld_takeamt Long ll_moneyid_account Long ll_salebillid IF billtype = 0 THEN //生成客户收款, 对单 IF sys_option_msttake_takeamt_secaudit = 0 THEN IF it_mxbt > 0 THEN //1.删除对数单 SELECT salebillid INTO :ll_salebillid FROM u_salebill WHERE relcode = :BaCode And dscrp like '%客户收款结算单自动生成%'; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //2.删除明细优惠 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" SELECT listno INTO :ll_listno FROM U_BmsttakeMX WHERE takeid = :BmstamtMX[i].takeid AND dscrp = :ls_about And billcode = :BaCode; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF //3.删除已收帐 IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE //IF sys_option_msttake_takeamt_secaudit = 0 THEN IF secflag = 1 THEN arg_msg = '客户收款结算单已终审,不能操作' rslt = 0 GOTO ext END IF IF uo_item.del_iteminput(itemid,reldateint,1,arg_msg,False) = 0 THEN arg_msg = '删除收支明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 1 THEN //生成供应商付款, 对单 IF secflag = 1 THEN arg_msg = '供应商付款结算单已终审,不能操作' rslt = 0 GOTO ext END IF IF it_mxbt > 0 THEN //1.删除对数单 SELECT buybillid INTO :ll_salebillid FROM u_buybill WHERE relcode = :BaCode And dscrp like '%供应商付款结算单自动生成%'; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_b.del(ll_salebillid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //2.删除明细优惠 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" SELECT listno INTO :ll_listno FROM U_BmstpayMX WHERE payid = :BmstamtMX[i].takeid AND dscrp = :ls_about And billcode = :BaCode; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应付明细对应的折扣金额应付帐失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_pay.del_payrecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF //3.删除已付帐 IF uo_pay.del_payrec (scid,1,relid, cusid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: Destroy uo_take Destroy uo_pay Destroy uo_item destroy uo_bill_s destroy uo_bill_b RETURN rslt end function public function integer uof_secauditing_end (ref string arg_msg);Long rslt = 1 Long ll_relid_ref Long i Long ll_itemid //Long ref_dateint Decimal lde_oriamt, lde_msttakeamt, lde_takeamt datetime ldt_zqdate uo_musttake uo_take uo_take = Create uo_musttake uo_salebill uo_bill_s uo_bill_s = Create uo_salebill //uo_mustpay uo_pay //uo_pay = Create uo_mustpay // //uo_iteminput uo_item //uo_item = Create uo_iteminput // //DateTime ld_viewdate //SetNull(ld_viewdate) // //Int li_item_dfttype,li_itemflag //Decimal ld_takeamt Long ll_moneyid_account string ls_dscrp ls_dscrp = dscrp IF Trim(fpcode) <> '' THEN ls_dscrp = ls_dscrp + ' 发票号:'+fpcode END IF IF billtype = 0 THEN //生成客户收款, 对单 IF sys_option_msttake_takeamt_secaudit = 1 THEN //终审,生成应收 //1.生成已收帐 s_bmsttake s_take s_take.scid = scid s_take.cusid = cusid s_take.takedate = BaDate s_take.inrep = BaRep s_take.oriamt = 0 - Bmstamt s_take.msttakeamt = 0 s_take.takeamt = Bmstamt s_take.dscrp = ls_dscrp s_take.billcode = BaCode s_take.banktypeid = banktypeid s_take.buildtype = 4 s_take.opemp = publ_operator s_take.outwareid = 0 s_take.salebillid = 0 s_take.viewdate = viewdate s_take.accountsid = accountid s_take.itemid = itemid s_take.moneyid = moneyid s_take.relcode = relcode SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :accountid; 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_take.add_takerec(s_take,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ll_relid_ref = uo_take.ref_takeid IF ll_relid_ref = 0 THEN arg_msg = '错误的应收应付帐ID!' rslt = 0 GOTO ext END IF UPDATE u_Bmstamt SET relid = :ll_relid_ref WHERE Baid = :Baid And flag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新单据资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF it_mxbt > 0 THEN //2.明细生成折扣金额(优惠款) IF f_get_itemid(3, ll_itemid, arg_msg) = 0 THEN //查询优惠款项目 rslt = 0 GOTO ext END IF String ls_about Bmstamt_mxsum = 0 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" IF sys_option_bmstamt_zqamt_date = 0 THEN ldt_zqdate = BaDate ELSE SELECT takedate INTO :ldt_zqdate FROM u_Bmsttake Where scid = :scid And takeid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应收帐发生日期信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF uo_take.add_takerecmx(scid,BmstamtMX[i].takeid,BaCode,ldt_zqdate,banktypeid,0 - BmstamtMX[i].tzqamt,0,& publ_operator,ls_about,BaRep,3,0,ll_itemid,cusid, moneyid,arg_msg,False,relcode) = 0 THEN rslt = 0 GOTO ext END IF END IF IF BmstamtMX[i].ttakeamt <> 0 THEN Bmstamt_mxsum += BmstamtMX[i].ttakeamt END IF NEXT //3.明细(扣除折扣金额)与当前已收帐对单 IF uo_bill_s.newbegin() = 0 THEN arg_msg = '初始化对单失败' rslt = 0 GOTO ext END IF uo_bill_s.opemp = publ_operator uo_bill_s.takedate = BaDate uo_bill_s.relcode = BaCode uo_bill_s.inrep = publ_operator uo_bill_s.banktypeid = banktypeid uo_bill_s.dscrp = '客户收款结算单自动生成' uo_bill_s.cusid = cusid uo_bill_s.msttakeamt = 0 uo_bill_s.takeamt = 0 uo_bill_s.accountsid = accountid uo_bill_s.itemid = itemid uo_bill_s.buildtype = 1 uo_bill_s.moneyid = moneyid // //插入收款明细 IF uo_bill_s.acceptmx(ll_relid_ref,& BaCode,& 0,& 0 - Bmstamt_mxsum,& 0 - Bmstamt,& 0,& Bmstamt,& BaCode,& arg_msg) = 0 THEN arg_msg = '对数单插入已收明细失败,'+arg_msg rslt = 0 GOTO ext END IF //插入应收明细 FOR i = 1 To it_mxbt IF BmstamtMX[i].ttakeamt <> 0 THEN SELECT oriamt, msttakeamt, takeamt INTO :lde_oriamt, :lde_msttakeamt, :lde_takeamt FROM U_Bmsttake Where takeid = :BmstamtMX[i].takeid; IF sqlca.SQLCode <> 0 THEN arg_msg = '行:'+String(i)+'查询应收帐信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_s.acceptmx(BmstamtMX[i].takeid,& BmstamtMX[i].billcode,& 0,& BmstamtMX[i].ttakeamt,& lde_oriamt,& lde_msttakeamt,& lde_takeamt,& BmstamtMX[i].relcode,& arg_msg) = 0 THEN arg_msg = '对数单插入应收明细失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT IF uo_bill_s.save_ds(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF ELSEIF billtype = 1 THEN //生成供应商付款, 对单 END IF ext: Destroy uo_take Destroy uo_bill_s //Destroy uo_item RETURN rslt end function public function integer uof_secauditing_cancel_end (ref string arg_msg);Long rslt = 1 Long ll_relid_ref Long i Long ll_itemid Decimal lde_oriamt, lde_msttakeamt, lde_takeamt Long ll_listno String ls_about uo_musttake uo_take uo_take = Create uo_musttake uo_salebill uo_bill_s uo_bill_s = Create uo_salebill //uo_mustpay uo_pay //uo_pay = Create uo_mustpay // uo_iteminput uo_item uo_item = Create uo_iteminput //DateTime ld_viewdate //SetNull(ld_viewdate) //Int li_item_dfttype,li_itemflag //Decimal ld_takeamt Long ll_moneyid_account Long ll_salebillid IF billtype = 0 THEN //生成客户收款, 对单 IF sys_option_msttake_takeamt_secaudit = 1 THEN IF it_mxbt > 0 THEN //1.删除对数单 SELECT salebillid INTO :ll_salebillid FROM u_salebill WHERE relcode = :BaCode And dscrp like '%客户收款结算单自动生成%'; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //2.删除明细优惠 FOR i = 1 To it_mxbt IF BmstamtMX[i].tzqamt <> 0 THEN ls_about = BaCode + "折扣金额" SELECT listno INTO :ll_listno FROM U_BmsttakeMX WHERE takeid = :BmstamtMX[i].takeid AND dscrp = :ls_about And billcode = :BaCode; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT END IF //3.删除已收帐 IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSEIF billtype = 1 THEN //生成供应商付款, 对单 //==================================================================== // 修改: 原来是注释了if else的,收款与付款都是执行相同的代码 //-------------------------------------------------------------------- // 作者: lwl 日期: 2015年06月08日 //==================================================================== // IF sys_option_msttake_takeamt_secaudit = 1 THEN // IF it_mxbt > 0 THEN // //1.删除对数单 // SELECT salebillid // INTO :ll_salebillid // FROM u_salebill // WHERE relcode = :BaCode // And dscrp = '客户收款结算单自动生成'; // IF sqlca.SQLCode <> 0 THEN // arg_msg = "查询对应对数单失败,"+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // // IF uo_bill_s.del(ll_salebillid, arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // // // //2.删除明细优惠 // FOR i = 1 To it_mxbt // IF BmstamtMX[i].tzqamt <> 0 THEN // ls_about = BaCode + "折扣金额" // // SELECT listno // INTO :ll_listno // FROM U_BmsttakeMX // WHERE takeid = :BmstamtMX[i].takeid // AND dscrp = :ls_about // And billcode = :BaCode; // IF sqlca.SQLCode <> 0 THEN // arg_msg = "查询应收明细对应的折扣金额应收帐失败,"+sqlca.SQLErrText // rslt = 0 // GOTO ext // END IF // // IF uo_take.del_takerecmx (2,BmstamtMX[i].takeid, ll_listno,arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF // // NEXT // END IF // // //3.删除已收帐 // IF uo_take.del_takerec (scid,1,relid, cusid, arg_msg,False) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF END IF ext: Destroy uo_take Destroy uo_bill_s //Destroy uo_item RETURN rslt end function public function integer audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg); Int rslt = 1,cnt = 0 IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag = 0 THEN rslt = 0 arg_msg = "单据没有终审" GOTO ext END IF IF cwauditingflag = 1 THEN rslt = 0 arg_msg = "单据已经总账审核" GOTO ext END IF UPDATE u_bmstamt SET cwauditingflag = 1, cwauditingdate = getdate(), cwauditingrep = :publ_operator WHERE ( u_bmstamt.Baid = :arg_billid ) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致总账审核操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using sqlca; END IF Return (rslt) end function public function integer c_audit_subject (long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg); Int rslt = 1,cnt = 0 IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF cwauditingflag = 0 THEN rslt = 0 arg_msg = "单据没有总账审核" GOTO ext END IF UPDATE u_bmstamt SET cwauditingflag = 0, cwauditingdate =null, cwauditingrep = '' WHERE ( u_bmstamt.Baid = :arg_billid ) Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致总账撤审操作失败"+"~n"+sqlca.SQLErrText ROLLBACK Using sqlca; GOTO ext END IF ext: IF arg_ifcommit And rslt = 1 THEN COMMIT Using sqlca; END IF Return (rslt) end function public function long getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 long i = 1, no_mxcheck IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误的单据id' GOTO ext END IF IF p_getinfo(arg_billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_bamx CURSOR FOR SELECT printid, scid, takeid, takedate, msttakeamt, takeamt, Zqamt, Ttakeamt, TZqamt, billid, billcode, relid, relcode, relprintid, mxdscrp FROM u_Bmstamtmx Where Baid = :arg_billid; OPEN cur_bamx; FETCH cur_bamx INTO :BmstamtMX[i].printid, :BmstamtMX[i].scid, :BmstamtMX[i].takeid, :BmstamtMX[i].takedate, :BmstamtMX[i].msttakeamt, :BmstamtMX[i].takeamt, :BmstamtMX[i].Zqamt, :BmstamtMX[i].Ttakeamt, :BmstamtMX[i].TZqamt, :BmstamtMX[i].billid, :BmstamtMX[i].billcode, :BmstamtMX[i].relid, :BmstamtMX[i].relcode, :BmstamtMX[i].relprintid, :BmstamtMX[i].mxdscrp; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_bamx INTO :BmstamtMX[i].printid, :BmstamtMX[i].scid, :BmstamtMX[i].takeid, :BmstamtMX[i].takedate, :BmstamtMX[i].msttakeamt, :BmstamtMX[i].takeamt, :BmstamtMX[i].Zqamt, :BmstamtMX[i].Ttakeamt, :BmstamtMX[i].TZqamt, :BmstamtMX[i].billid, :BmstamtMX[i].billcode, :BmstamtMX[i].relid, :BmstamtMX[i].relcode, :BmstamtMX[i].relprintid, :BmstamtMX[i].mxdscrp; LOOP CLOSE cur_bamx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_Bmstamtmx Where Baid = :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 Baid = arg_billid it_MXBT = i - 1 it_newbegin=FALSE it_updatebegin=FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN arg_msg = '错误的单据id' GOTO ext END IF SELECT u_Bmstamt.scid, u_Bmstamt.cusid, u_Bmstamt.banktypeid, u_Bmstamt.accountid, u_Bmstamt.BaDate, u_Bmstamt.Bmstamt, u_Bmstamt.dscrp, u_Bmstamt.flag, u_Bmstamt.BaCode, u_Bmstamt.billtype, u_Bmstamt.relid, u_Bmstamt.itemid, u_Bmstamt.BaRep, u_Bmstamt.moneyid, u_Bmstamt.mrate, u_Bmstamt.confirmflag, u_Bmstamt.relcode, u_Bmstamt.secflag, u_Bmstamt.secemp, u_Bmstamt.secdate, u_Bmstamt.fpcode, reldateint, viewdate, zqamt, u_Bmstamt.cwauditingflag, u_Bmstamt.cwauditingrep, u_Bmstamt.cwauditingdate INTO :scid, :cusid, :banktypeid, :accountid, :BaDate, :Bmstamt, :dscrp, :flag, :BaCode, :billtype, :relid, :itemid, :BaRep, :moneyid, :mrate, :confirmflag, :relcode, :secflag, :secemp, :secdate, :fpcode, :reldateint, :viewdate, :zqamt, :cwauditingflag, :cwauditingrep, :cwauditingdate FROM u_Bmstamt Where u_Bmstamt.Baid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询数据操作失败,收据'+sqlca.SQLErrText GOTO ext END IF Baid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function on uo_bmstamt.create call super::create TriggerEvent( this, "constructor" ) end on on uo_bmstamt.destroy TriggerEvent( this, "destructor" ) call super::destroy end on