$PBExportHeader$uo_amerce.sru forward global type uo_amerce from nonvisualobject end type end forward global type uo_amerce from nonvisualobject end type global uo_amerce uo_amerce type variables public protectedwrite long scid //罚款单scid public protectedwrite long billid //罚款单自动增量id public protectedwrite string billcode //罚款单的唯一编号 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 //审核操作员 long sptid //供应商ID datetime billdate //日期 decimal amerceamt //罚款金额 string amercereason //罚款原因 string relcode //相关号 long payid int banktypeid string inrep long moneyid long itemid private: boolean it_newbegin=false //新建标志 boolean it_updatebegin=false//修改标志 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 getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg) end prototypes public function integer p_reset ();//INT p_RESET() //清除对象及其明细 billid=0 billcode='' opemp='' auditingrep='' flag=0 sptid=0 amerceamt=0 amercereason='' relcode='' it_newbegin=FALSE it_updatebegin=FALSE RETURN 1 end function public function integer save (ref string arg_msg, boolean arg_ifcommit);//==================================================================== // Function: save(arg_msg,arg_ifcommit) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode IF IsNull(sptid) THEN sptid = 0 IF IsNull(amerceamt) THEN amerceamt = 0 IF IsNull(banktypeid) THEN banktypeid = 0 IF IsNull(amercereason) THEN amercereason = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(inrep) THEN inrep = '' IF IsNull(moneyid) THEN moneyid = 0 IF IsNull(itemid) THEN itemid = 0 IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_spt Where sptid = :sptid; 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 IF amerceamt = 0 THEN arg_msg = '请输入正确的罚款金额' rslt = 0 GOTO ext END IF IF inrep = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF IF banktypeid = 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(billdate)) < 2000 Or IsNull(billdate) THEN rslt = 0 arg_msg = "时间不合理" GOTO ext END IF ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_spt_amerce","billid",arg_msg,True,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF billcode = getid(scid,ls_sccode + "KK",Date(server_dt),True,sqlca) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取罚款单编号" GOTO ext END IF INSERT INTO u_spt_amerce ( scid, billid, billcode, billdate, sptid, amerceamt, banktypeid, inrep, amercereason, relcode, opdate, opemp, moneyid, itemid) VALUES ( :scid, :ls_newid, :billcode, :billdate, :sptid, :amerceamt, :banktypeid, :inrep, :amercereason, :relcode, :server_dt, :publ_operator, :moneyid, :itemid); IF sqlca.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN arg_msg = '建立供应商罚款单失败,关键字分部ID、单据ID重复' ELSEIF Pos(Lower(sqlca.SQLErrText),'ix_u_spt_amerce') > 0 THEN arg_msg = '建立供应商罚款单失败,单据编号重复' ELSE arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText END IF GOTO ext END IF billid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_spt_amerce SET billdate = :billdate, sptid = :sptid, amerceamt = :amerceamt, amercereason = :amercereason, banktypeid = :banktypeid, inrep = :inrep, relcode = :relcode, moddate = :server_dt, modemp = :publ_operator, moneyid = :moneyid, itemid = :itemid WHERE u_spt_amerce.billid = :billid AND u_spt_amerce.scid = :scid And u_spt_amerce.flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN arg_msg = '更新供应商罚款单失败,关键字分部ID、单据ID重复' ELSEIF Pos(Lower(sqlca.SQLErrText),'ix_u_spt_amerce') > 0 THEN arg_msg = '更新供应商罚款单失败,单据编号重复' ELSE arg_msg = "因网络或其它原因导致更新单据操作失败>>"+"~n"+sqlca.SQLErrText END IF GOTO ext END IF END IF it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF arg_msg = '供应商罚款单,'+ arg_msg 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 getinfo(arg_scid,arg_billid,arg_msg) = 0 then rslt = 0 goto ext end if if flag = 1 then rslt = 0 arg_msg = '单据已经审核,不可以修改' goto ext end if billid = arg_billid scid = arg_scid it_newbegin = false it_updatebegin = true ext: if rslt = 0 then p_reset() arg_msg = '供应商罚款单,'+ arg_msg 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() arg_msg = '供应商罚款单,'+ arg_msg 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_spt_amerce.flag into :flag from u_spt_amerce where u_spt_amerce.billid = :arg_billid; if sqlca.sqlcode <> 0 then rslt = 0 if pos(lower(sqlca.SQLErrText),'more than') > 0 then arg_msg = '查询单据操作失败,查询数据返回值多于一个' else arg_msg = '查询单据操作失败' end if goto ext end if if flag = 1 then rslt = 0 arg_msg = "单据已经审核,不可以删除" goto ext end if delete from u_spt_amerce where u_spt_amerce.billid = :arg_billid and u_spt_amerce.scid = :arg_scid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = "删除罚款单操作失败" goto ext end if commit; it_newbegin = false it_updatebegin = false if rslt = 0 then rollback; p_reset() end if ext: arg_msg = '供应商罚款单,'+ arg_msg return (rslt) end function public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN billid = 0 arg_msg = '错误的单据id' GOTO ext END IF SELECT u_spt_amerce.billcode, u_spt_amerce.billdate, u_spt_amerce.sptid, u_spt_amerce.amerceamt, u_spt_amerce.banktypeid, u_spt_amerce.inrep, u_spt_amerce.amercereason, u_spt_amerce.payid, u_spt_amerce.relcode, u_spt_amerce.flag, u_spt_amerce.moneyid, u_spt_amerce.itemid INTO :billcode, :billdate, :sptid, :amerceamt, :banktypeid, :inrep, :amercereason, :payid, :relcode, :flag, :moneyid, :itemid FROM u_spt_amerce WHERE u_spt_amerce.billid = :arg_billid AND u_spt_amerce.scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN arg_msg = '查询单据资料操作失败,查询数据返回值多于一个' ELSE arg_msg = '查询单据资料操作失败' END IF GOTO ext END IF scid = arg_scid billid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_dscrp uo_mustpay uo_pay uo_pay = Create uo_mustpay IF getinfo(arg_scid,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 it_newbegin Or it_updatebegin THEN rslt = 0 arg_msg = "编辑状态下不可以执行审核" GOTO ext END IF UPDATE u_spt_amerce SET auditrep = :publ_operator, auditdate = getdate(), flag = 1 WHERE u_spt_amerce.billid = :arg_billid And flag = 0 And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN arg_msg = '审核供应商罚款单操作失败,关键字分部ID、单据ID重复' ELSE arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText END IF GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。" GOTO ext END IF IF amerceamt <> 0 THEN ls_dscrp = billcode + "罚款" Long ll_dft_itemid SELECT itemid INTO :ll_dft_itemid FROM u_itemdef Where dfttype = 9; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询默认供应商罚款单项目资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DateTime plandate SetNull(plandate) IF uo_pay.add_payrec (scid,sptid,billdate,inrep,0 - amerceamt,0 - amerceamt,0,ls_dscrp,& billcode,banktypeid,1,publ_operator,billid,0,arg_msg,False,plandate,0,ll_dft_itemid,moneyid,relcode) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_spt_amerce SET payid = :uo_pay.ref_payid WHERE u_spt_amerce.billid = :arg_billid AND scid = :scid And flag = 1 ; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新罚款单相关应收帐ID失败' rslt = 0 GOTO ext END IF END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_pay arg_msg = '供应商罚款单,'+ arg_msg RETURN rslt end function public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt=1 string str_dscrp datetime null_dt setnull(null_dt) uo_mustpay uo_pay uo_pay = create uo_mustpay if getinfo(arg_scid,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 it_newbegin or it_updatebegin then rslt = 0 arg_msg = "编辑状态下不可以执行审核" goto ext end if update u_spt_amerce set auditrep = '', auditdate = :null_dt, flag = 0 where u_spt_amerce.billid = :arg_billid and flag = 1 and scid = :arg_scid; if sqlca.sqlcode <> 0 then rslt = 0 if pos(lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 then arg_msg = '撤审供应商罚款单操作失败,关键字分部ID、单据ID重复' else arg_msg = "因网络或其它原因导致撤审单据操作失败"+"~n"+sqlca.SQLErrText end if goto ext elseif sqlca.sqlnrows = 0 then rslt = 0 arg_msg = "单据正在撤消审核,请稍后查询。" goto ext end if if amerceamt <> 0 then if uo_pay.del_payrec(scid,1,payid,sptid,arg_msg,false)=0 then rslt=0 goto ext end if end if flag = 0 ext: if rslt=0 then rollback; elseif rslt=1 and arg_ifcommit then commit; end if destroy uo_pay arg_msg = '供应商罚款单,'+ arg_msg return rslt end function public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);//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 arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF rslt = getinfo(arg_scid,arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 0 THEN rslt = 0 arg_msg = "非审核状态下不可用" GOTO ext END IF UPDATE u_spt_amerce SET amercereason = amercereason+' '+:arg_newdescppart WHERE u_spt_amerce.billid = :arg_billid AND scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN ROLLBACK ; rslt = 0 if pos(lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 then arg_msg = '添加供应商罚款单备注失败,关键字分部ID、单据ID重复' else arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText end if GOTO ext END IF COMMIT ; amercereason = amercereason+' '+arg_newdescppart ext: arg_msg = '供应商罚款单,'+ arg_msg Return (rslt) end function on uo_amerce.create call super::create TriggerEvent( this, "constructor" ) end on on uo_amerce.destroy TriggerEvent( this, "destructor" ) call super::destroy end on