$PBExportHeader$uo_salebill.sru forward global type uo_salebill from nonvisualobject end type type s_bmsttakemx from structure within uo_salebill end type end forward type s_bmsttakemx from structure long scid long takeid string billcode datetime takedate string taketype decimal { 2 } msttakeamt decimal { 2 } takeamt decimal { 2 } oriamt decimal { 2 } mainmsttakeamt decimal { 2 } maintakeamt string opemp string dscrp string inrep integer buildtype long banktypeid string relbillcode end type global type uo_salebill from nonvisualobject end type global uo_salebill uo_salebill type variables PUBLIC PROTECTEDWRITE Long scid=0 PUBLIC PROTECTEDWRITE Long salebillid //销售收入单表自动增量ID PUBLIC PROTECTEDWRITE String salebillcode //所有单据的唯一编号 PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动 PUBLIC PROTECTEDWRITE Int flag = 0 //审核标志 PUBLIC PROTECTEDWRITE DateTime Auditdate //审核时间 PUBLIC PROTECTEDWRITE String auditREP //审核操作员 String relcode = '' //交易单号 String opemp //建立操作员 DateTime takedate //发生时间 String taketype = '' //付款方式 String dscrp = '' //备注 Long cusid = 0 //客户id Decimal msttakeamt //收入金额 Decimal takeamt //收入金额 String inrep Long ywrepid //业务员ID Long banktypeid //结算方式 Long rapmoneyid //出纳帐ID Long accountsid //帐号ID Long itemid //收支项目ID long buildtype //建立类型 int billtype long moneyid=0 PRIVATE: S_BmsttakeMX mx[] //明细结构数组 Long it_MXBT = 0 //明细结构数组末指针 Boolean IT_NEWBEGIN = FALSE //新建标志 Boolean IT_UPDATEBEGIN = FALSE//修改标志 end variables forward prototypes public function integer p_clearmx () public function integer p_reset () public function integer newbegin () public function integer updatebegin (long arg_salebillid, ref string arg_msg) public function integer save (ref string arg_msg, boolean arg_ifcommt) public function integer del (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_salebillid, ref string arg_msg) public function integer add_dscrp (long arg_salebillid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit) public function integer c_auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit) public function integer acceptmx (long arg_takeid, string arg_billcode, decimal arg_msttakeamt, decimal arg_takeamt, decimal arg_oriamt, decimal arg_mainmsttakeamt, decimal arg_maintakeamt, string arg_relbillcode, ref string arg_msg) public function integer save_ds (ref string arg_msg, boolean arg_ifcommt) end prototypes public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer p_reset ();//INT p_RESET() //清除对象及其明细 salebillid=0 salebillcode='' opemp='' flag=0 it_newbegin=FALSE it_updatebegin=FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer newbegin ();//newbegin() //从置对象,设定业务类型,准备建立新单 //0 fail 1 success LONG RSLT=1 p_reset() it_newbegin=TRUE it_updatebegin=FALSE return RSLT end function public function integer updatebegin (long arg_salebillid, ref string arg_msg);//UPDATEbegin(arg_salebillid,arg_msg) //从置对象,设定业务类型,准备更新单 //0 fail 1 success int rslt=1,CNT=0 IF arg_salebillid<=0 THEN rslt=0 salebillid=0 goto ext end if if getinfo(arg_salebillid,arg_msg)=0 then rslt=0 goto ext end if if buildtype=1 then rslt=0 ARG_MSG='单据是系统自动建立,不可以修改' goto ext end if if flag=1 then rslt=0 ARG_MSG='单据已经审核,不可以修改' goto ext end if salebillid=arg_salebillid if flag=0 then p_CLEARMX() it_newbegin=FALSE it_updatebegin=TRUE ext: IF rslt=0 THEN p_RESET() return rslt end function public function integer save (ref string arg_msg, boolean arg_ifcommt);//save(arg_msg,arg_ifcommt) // 新建(salebillid=0)\更新(salebillid>0) //0 fail 1 success uo_musttake uo_take uo_take = CREATE uo_musttake Integer rslt = 1,cnt = 0,i Decimal LS_KTSL Long LS_NEWoutWAREID DateTime server_datetime Long ls_newid Long ref_dateint String ls_cusname Decimal ls_msttakeamt Decimal ls_takeamt Long ll_itemid Long ll_dateint Long ll_takeid Long ll_cusid Long ll_scid string ls_billcode Long ll_take_i String ls_take_i_billcode,ls_not_take_i_billcode Dec ld_msttakeamt,ld_takeamt DateTime ld_takedate IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(inrep) THEN inrep = '' IF IsNull(taketype) THEN taketype = '' IF IsNull(accountsid) THEN accountsid = 0 IF IsNull(itemid) THEN itemid = 0 IF IsNull(moneyid) THEN moneyid = 0 IF moneyid <= 0 THEN rslt = 0 arg_msg = '请选择币种!' GOTO ext END IF IF it_newbegin = FALSE AND it_updatebegin = FALSE 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 it_mxbt = 0 THEN //如果输入库存物料资料错则已经清空 rslt = 0 arg_msg = "没有正确单据内容" GOTO ext END IF IF Year(Date(takedate)) < 2000 OR IsNull(takedate) THEN rslt = 0 arg_msg = "缺少出仓发生时间或不合理" GOTO ext END IF //cnt = 0 //SELECT count(*) INTO :cnt // FROM cw_banktype // Where banktypeid = :banktypeid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arG_MSG = "查询操作失败,结算方式!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arG_MSG = "结算方式未登记或已取消!" // GOTO ext //END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :cusid ; 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 name INTO :ls_cusname FROM u_cust Where u_cust.cusid = :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 = :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 opdate = server_datetime //填写单据建立时间(最近修改时间) ////////////////////////////////////////////////开始区分:新建/更新 处理 IF salebillid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"U_salebill","salebillid",arg_msg,TRUE,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF salebillcode = getid(0,"SB",Date(server_datetime),TRUE,sqlca) //取得新单据编号 IF salebillcode = "err" THEN salebillcode = '' rslt = 0 arg_msg = "无法获取收入单编号" GOTO ext END IF FOR i = 1 TO it_mxbt IF mx[i].mainmsttakeamt = 0 AND mx[i].maintakeamt <> 0 THEN ll_take_i = i ls_take_i_billcode = mx[i].billcode ELSE ls_not_take_i_billcode = ls_not_take_i_billcode + Trim(mx[i].billcode)+',' END IF NEXT ls_not_take_i_billcode = Left(ls_not_take_i_billcode,Len(ls_not_take_i_billcode) - 1 ) FOR i = 1 TO it_mxbt IF i = ll_take_i THEN mx[i].relbillcode = ls_not_take_i_billcode ELSE mx[i].relbillcode = ls_take_i_billcode END IF ld_msttakeamt = ld_msttakeamt - mx[i].Msttakeamt ld_takeamt = ld_takeamt - mx[i].takeamt NEXT IF uo_take.add_takerec(scid,cusid,takedate,inrep,Msttakeamt - takeamt ,Msttakeamt,takeamt,& dscrp,salebillcode,banktypeid,1,opemp,0,ls_newid,arg_msg,FALSE,takedate,accountsid,itemid,moneyid,'') = 0 THEN rslt = 0 GOTO ext END IF Long ref_takeid ref_takeid = uo_take.ref_takeid SELECT rapmoneyid INTO :ref_dateint FROM u_bmsttake Where takeid = :ref_takeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询应收帐(收支帐ID)失败!' GOTO ext END IF IF uo_take.add_takerecmx(scid,ref_takeid,ls_not_take_i_billcode, takedate, banktypeid,ld_msttakeamt,& ld_takeamt, opemp, dscrp, inrep,2,ls_newid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF INSERT INTO U_salebill ( salebillid, salebillcode, takedate, Relcode, Msttakeamt, takeamt, cusid, dscrp, taketype, inrep, opdate, opemp, YwrepID, banktypeid, rapmoneyid , accountsid, itemid, buildtype, billtype, moneyid) VALUES ( :ls_newid, :salebillcode, :takedate, :Relcode, :Msttakeamt, :takeamt, :cusid, :dscrp, :taketype, :inrep, :opdate, :opemp, :YwrepID, :banktypeid, :ref_dateint , :accountsid, :itemid, :buildtype, :billtype, :moneyid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt IF mx[i].relbillcode = '' THEN mx[i].relbillcode = salebillcode ls_billcode = Left(mx[i].relbillcode, 30) IF uo_take.add_takerecmx(mx[i].scid,mx[i].takeid,ls_billcode,mx[i].takedate,mx[i].banktypeid,mx[i].Msttakeamt,& mx[i].takeamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,ls_newid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF NEXT salebillid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_salebillmx (scid, salebillid, takeid, takedate, msttakeamt, takeamt, billcode, relbillcode, oriamt, mainmsttakeamt, maintakeamt ) VALUES (:mx[i].scid, :ls_newid, :mx[i].takeid, :mx[i].takedate, :mx[i].msttakeamt, :mx[i].takeamt, :mx[i].billcode, :mx[i].relbillcode, :mx[i].oriamt, :mx[i].mainmsttakeamt, :mx[i].maintakeamt ); IF sqlca.SQLCode <> 0 THEN salebillid = 0 rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText // ROLLBACK USING sqlca; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 SELECT msttakeamt, takeamt, itemid, rapmoneyid, takedate INTO :ls_msttakeamt, :ls_takeamt, :ll_itemid, :ll_dateint, :ld_takedate FROM u_salebill Where U_salebill.salebillid = :salebillid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应收帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //删除对数单明细生成的应收帐明细 IF uo_take.salebill_del_mx(salebillid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ///////////////////// //删除对数单主表生成的应收帐 SELECT takeid,cusid,scid INTO :ll_takeid,:ll_cusid,:ll_scid FROM u_bmsttake Where salebillid = :salebillid; IF sqlca.SQLCode = 0 THEN IF uo_take.del_takerec(ll_scid,1,ll_takeid,ll_cusid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ELSEIF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询应收帐失败!'+"~n"+sqlca.SQLErrText GOTO ext END IF ///////////////////////////// ////重新生成应收帐明细 FOR i = 1 TO it_mxbt IF mx[i].mainmsttakeamt = 0 AND mx[i].maintakeamt <> 0 THEN ll_take_i = i ls_take_i_billcode = mx[i].billcode ELSE ls_not_take_i_billcode = ls_not_take_i_billcode + Trim(mx[i].billcode)+',' END IF NEXT ls_not_take_i_billcode = Left(ls_not_take_i_billcode,Len(ls_not_take_i_billcode) - 1 ) FOR i = 1 TO it_mxbt IF i = ll_take_i THEN mx[i].relbillcode = ls_not_take_i_billcode ELSE mx[i].relbillcode = ls_take_i_billcode END IF ld_msttakeamt = ld_msttakeamt - mx[i].Msttakeamt ld_takeamt = ld_takeamt - mx[i].takeamt NEXT IF uo_take.add_takerec(scid,cusid,takedate,inrep,Msttakeamt - takeamt ,Msttakeamt,takeamt,& dscrp,salebillcode,banktypeid,1,opemp,0,salebillid,arg_msg,FALSE,takedate,accountsid,itemid,moneyid,'') = 0 THEN rslt = 0 GOTO ext END IF ref_takeid = uo_take.ref_takeid SELECT rapmoneyid INTO :ref_dateint FROM u_bmsttake Where takeid = :ref_takeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询应收帐(收支帐ID)失败!' GOTO ext END IF IF uo_take.add_takerecmx(scid,ref_takeid,ls_not_take_i_billcode, takedate, banktypeid,ld_msttakeamt,& ld_takeamt, opemp, dscrp, inrep,2,salebillid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF FOR i = 1 TO it_mxbt // ls_billcode = Left(mx[i].relbillcode, 30) IF uo_take.add_takerecmx(mx[i].scid,mx[i].takeid,mx[i].billcode,mx[i].takedate,mx[i].banktypeid,mx[i].Msttakeamt,& mx[i].takeamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,salebillid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF NEXT /////////////////////////// UPDATE U_salebill SET takedate = :takedate, Relcode = :Relcode, Msttakeamt = :Msttakeamt, takeamt = :takeamt, cusid = :cusid, dscrp = :dscrp, taketype = :taketype, inrep = :inrep, opdate = :opdate, opemp = :opemp, YwrepID = :YwrepID, banktypeid = :banktypeid, rapmoneyid = :ref_dateint, accountsid = :accountsid, itemid = :itemid, billtype = :billtype, moneyid = :moneyid Where U_salebill.salebillid = :salebillid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM U_salebillmx Where u_salebillmx.salebillid = :salebillid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText // ROLLBACK USING sqlca; GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_salebillmx (scid, salebillid, takeid, takedate, msttakeamt, takeamt, billcode, relbillcode, oriamt, mainmsttakeamt, maintakeamt ) VALUES (:mx[i].scid, :salebillid, :mx[i].takeid, :mx[i].takedate, :mx[i].msttakeamt, :mx[i].takeamt, :mx[i].billcode, :mx[i].relbillcode, :mx[i].oriamt, :mx[i].mainmsttakeamt, :mx[i].maintakeamt ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText // ROLLBACK USING sqlca; GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE salebillid = ls_newid ext: DESTROY uo_take IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommt THEN COMMIT; END IF RETURN rslt end function public function integer del (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit);//cancel() //如果单据还没有审核删除单据极其明细 //0 FAIL, 1 SUCCESS uo_musttake uo_take uo_take = CREATE uo_musttake Int rslt = 1 Decimal ls_msttakeamt Decimal ls_takeamt Long ll_itemid Long ll_dateint DateTime ld_takedate Long ll_takeid,ll_cusid,ll_scid IF arg_salebillid <= 0 THEN rslt = 0 arG_MSG = "没有删除对象,操作取消" GOTO ext END IF IF getinfo(arg_salebillid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arG_MSG = "单据已经审核,不可以删除" GOTO ext END IF // IF uo_take.salebill_del_mx(arg_salebillid,arG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF SELECT takeid,cusid,scid INTO :ll_takeid,:ll_cusid,:ll_scid FROM u_Bmsttake Where salebillid = :arg_salebillid; IF sqlca.SQLCode = 0 THEN IF uo_take.del_takerec(ll_scid,1,ll_takeid,ll_cusid,arG_MSG,FALSE) = 0 THEN rslt = 0 GOTO ext END IF ELSEif sqlca.sqlcode=-1 then rslt = 0 arG_MSG = '查询应收帐失败!'+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_salebill Where u_salebill.salebillid = :arg_salebillid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除销售收入单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_salebillmx Where u_salebillmx.salebillid = :arg_salebillid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "删除销售收入单明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK USING sqlca; GOTO ext END IF it_newbegin = FALSE it_updatebegin = FALSE ext: destroy uo_take IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer getinfo (long arg_salebillid, ref string arg_msg);int rslt=1 SELECT U_salebill.salebillcode, U_salebill.takedate, U_salebill.Relcode, U_salebill.Msttakeamt, U_salebill.takeamt, U_salebill.cusid, U_salebill.dscrp, U_salebill.taketype, U_salebill.inrep, U_salebill.opdate, U_salebill.opemp, U_salebill.auditdate, U_salebill.auditrep, U_salebill.flag, u_salebill.YwrepID, u_salebill.banktypeid, u_salebill.rapmoneyid, u_salebill.accountsid, u_salebill.itemid, u_salebill.buildtype, u_salebill.moneyid INTO :salebillcode, :takedate, :Relcode, :Msttakeamt, :takeamt, :cusid, :dscrp, :taketype, :inrep, :opdate, :opemp, :auditdate, :auditrep, :flag, :ywrepid, :banktypeid , :rapmoneyid, :accountsid, :itemid, :buildtype, :moneyid FROM U_salebill WHERE U_salebill.salebillid = :arg_salebillid; if sqlca.sqlcode<>0 then rslt=0 ARG_MSG='查询数据操作失败,收入单' goto ext end if ext: return rslt end function public function integer add_dscrp (long arg_salebillid, 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_salebillid,arg_msg)=0 then rslt=0 goto ext end if IF flag=0 THEN rslt=0 arG_MSG="非审核状态下不可用" goto ext END IF UPDATE u_salebill SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_salebill.salebillid = :arg_salebillid; 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 auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);//auditing() //0 fail 1 success //仓库审核 Long rslt = 1,cnt = 0 IF arg_salebillid = 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 IF getinfo(arg_salebillid,arG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF flag = 1 THEN rslt = 0 arG_MSG = "单据已经过审核" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :arg_auditrep; 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 UPDATE u_salebill SET Auditrep = :arg_auditrep, Auditdate = getdate(), flag = 1 Where u_salebill.salebillid = :arg_salebillid AND flag = 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 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 c_auditing (long arg_salebillid, string arg_auditrep, ref string arg_msg, boolean arg_ifcommit);//c_auditing() //0 fail 1 success //仓库审核 long rslt=1,cnt=0 IF arg_salebillid=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 if getinfo(arg_salebillid,arg_msg)=0 then rslt=0 goto ext end if IF flag=0 THEN rslt=0 arG_MSG="单据未被审核,不能撤审" goto ext END IF SELECT count(*) INTO :cnt FROM u_user WHERE username=:arg_auditrep; 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 null_datetime setnull(null_datetime) UPDATE u_salebill SET Auditrep = '', Auditdate = :null_datetime, flag = 0 WHERE u_salebill.salebillid = :arg_salebillid 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 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 acceptmx (long arg_takeid, string arg_billcode, decimal arg_msttakeamt, decimal arg_takeamt, decimal arg_oriamt, decimal arg_mainmsttakeamt, decimal arg_maintakeamt, string arg_relbillcode, ref string arg_msg);//acceptmx(arg_Takeid,arg_Billcode,arg_Msttakeamt,arg_Takeamt,arg_msg) //RETURN 0 fail 1 success Long rslt = 1 Long ll_scid IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arG_MSG = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_takeid) THEN arg_takeid = 0 IF IsNull(arg_billcode) THEN arg_billcode = '' IF IsNull(arg_relbillcode) THEN arg_relbillcode = '' IF IsNull(arg_msttakeamt) THEN arg_msttakeamt = 0 IF IsNull(arg_takeamt) THEN arg_takeamt = 0 IF IsNull(arg_oriamt) THEN arg_oriamt = 0 IF IsNull(arg_mainmsttakeamt) THEN arg_mainmsttakeamt = 0 IF IsNull(arg_maintakeamt) THEN arg_maintakeamt = 0 SELECT scid INTO :ll_scid FROM u_bmsttake Where takeid = :arg_takeid; IF sqlca.SQLCode <> 0 THEN arG_MSG = '查询单据所属分部失败:'+arg_billcode+' '+sqlca.SQLErrText rslt = 0 GOTO ext END IF //写入内容 it_mxbt++ mx[it_mxbt].scid = ll_scid mx[it_mxbt].takeid = arg_takeid mx[it_mxbt].billcode = arg_billcode mx[it_mxbt].relbillcode = arg_relbillcode mx[it_mxbt].takedate = takedate mx[it_mxbt].taketype = taketype mx[it_mxbt].msttakeamt = arg_msttakeamt mx[it_mxbt].takeamt = arg_takeamt mx[it_mxbt].oriamt = arg_oriamt mx[it_mxbt].mainmsttakeamt = arg_mainmsttakeamt mx[it_mxbt].maintakeamt = arg_maintakeamt mx[it_mxbt].opemp = publ_operator mx[it_mxbt].dscrp = relcode mx[it_mxbt].inrep = inrep mx[it_mxbt].buildtype = 2 mx[it_mxbt].banktypeid = banktypeid ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer save_ds (ref string arg_msg, boolean arg_ifcommt);//save(arg_msg,arg_ifcommt) // 新建(salebillid=0)\更新(salebillid>0) //0 fail 1 success uo_musttake uo_take uo_take = CREATE uo_musttake Integer rslt = 1,cnt = 0,i Decimal LS_KTSL Long LS_NEWoutWAREID DateTime server_datetime Long ls_newid Long ref_dateint String ls_cusname Decimal ls_msttakeamt Decimal ls_takeamt Long ll_itemid Long ll_dateint DateTime ld_takedate IF IsNull(dscrp) THEN dscrp = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(inrep) THEN inrep = '' IF IsNull(taketype) THEN taketype = '' IF IsNull(accountsid) THEN accountsid = 0 IF IsNull(itemid) THEN itemid = 0 IF moneyid <= 0 THEN rslt = 0 arg_msg = '请选择币种!' GOTO ext END IF IF it_newbegin = FALSE AND it_updatebegin = FALSE 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 it_mxbt = 0 THEN //如果输入库存物料资料错则已经清空 rslt = 0 arg_msg = "没有正确单据内容" GOTO ext END IF IF Year(Date(takedate)) < 2000 OR IsNull(takedate) THEN rslt = 0 arg_msg = "缺少出仓发生时间或不合理" GOTO ext END IF //cnt = 0 //SELECT count(*) INTO :cnt // FROM cw_banktype // Where banktypeid = :banktypeid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arG_MSG = "查询操作失败,结算方式!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arG_MSG = "结算方式未登记或已取消!" // GOTO ext //END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :cusid ; 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 name INTO :ls_cusname FROM u_cust Where u_cust.cusid = :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 = :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 opdate = server_datetime //填写单据建立时间(最近修改时间) ////////////////////////////////////////////////开始区分:新建/更新 处理 IF salebillid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"U_salebill","salebillid",arg_msg,false,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF salebillcode = getid(0,"SB",Date(server_datetime),false,sqlca) //取得新单据编号 IF salebillcode = "err" THEN salebillcode = '' rslt = 0 arg_msg = "无法获取收入单编号" GOTO ext END IF INSERT INTO U_salebill ( salebillid, salebillcode, takedate, Relcode, Msttakeamt, takeamt, cusid, dscrp, taketype, inrep, opdate, opemp, YwrepID, banktypeid, rapmoneyid , accountsid, itemid, buildtype, moneyid) VALUES ( :ls_newid, :salebillcode, :takedate, :Relcode, :Msttakeamt, :takeamt, :cusid, :dscrp, :taketype, :inrep, :opdate, :opemp, :YwrepID, :banktypeid, :ref_dateint , :accountsid, :itemid, :buildtype, :moneyid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt IF mx[i].relbillcode = '' THEN mx[i].relbillcode = salebillcode IF uo_take.add_takerecmx(mx[i].scid,mx[i].takeid,mx[i].relbillcode,datetime(string(today()) + ' ' + string(now())),mx[i].banktypeid,mx[i].Msttakeamt,& mx[i].takeamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,ls_newid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF NEXT salebillid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_salebillmx (scid, salebillid, takeid, takedate, msttakeamt, takeamt, billcode, relbillcode, oriamt, mainmsttakeamt, maintakeamt ) VALUES (:mx[i].scid, :ls_newid, :mx[i].takeid, :mx[i].takedate, :mx[i].msttakeamt, :mx[i].takeamt, :mx[i].billcode, :mx[i].relbillcode, :mx[i].oriamt, :mx[i].mainmsttakeamt, :mx[i].maintakeamt ); IF sqlca.SQLCode <> 0 THEN salebillid = 0 rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK USING sqlca; GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 SELECT msttakeamt, takeamt, itemid, rapmoneyid, takedate INTO :ls_msttakeamt, :ls_takeamt, :ll_itemid, :ll_dateint, :ld_takedate FROM u_salebill Where U_salebill.salebillid = :salebillid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应收帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE U_salebill SET takedate = :takedate, Relcode = :Relcode, Msttakeamt = :Msttakeamt, takeamt = :takeamt, cusid = :cusid, dscrp = :dscrp, taketype = :taketype, inrep = :inrep, opdate = :opdate, opemp = :opemp, YwrepID = :YwrepID, banktypeid = :banktypeid, rapmoneyid = :ref_dateint, accountsid = :accountsid, itemid = :itemid, moneyid = :moneyid Where U_salebill.salebillid = :salebillid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM U_salebillmx Where u_salebillmx.salebillid = :salebillid USING sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK USING sqlca; GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_salebillmx (scid, salebillid, takeid, takedate, msttakeamt, takeamt, billcode, relbillcode, oriamt, mainmsttakeamt, maintakeamt ) VALUES (:mx[i].scid, :ls_newid, :mx[i].takeid, :mx[i].takedate, :mx[i].msttakeamt, :mx[i].takeamt, :mx[i].billcode, :mx[i].relbillcode, :mx[i].oriamt, :mx[i].mainmsttakeamt, :mx[i].maintakeamt ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText ROLLBACK USING sqlca; GOTO ext END IF NEXT IF uo_take.salebill_del_mx(salebillid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF FOR i = 1 TO it_mxbt IF uo_take.add_takerecmx(mx[i].scid,mx[i].takeid,mx[i].billcode,datetime(string(today()) + ' ' + string(now())),mx[i].banktypeid,mx[i].Msttakeamt,& mx[i].takeamt,mx[i].opemp,mx[i].dscrp,mx[i].inrep,2,salebillid,0,cusid,moneyid,arg_msg,FALSE,'') = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE salebillid = ls_newid ext: DESTROY uo_take IF rslt = 0 THEN ROLLBACK; //salebillid=0 p_clearmx() ELSEIF rslt = 1 AND arg_ifcommt THEN COMMIT; END IF RETURN rslt end function on uo_salebill.create call super::create TriggerEvent( this, "constructor" ) end on on uo_salebill.destroy TriggerEvent( this, "destructor" ) call super::destroy end on