$PBExportHeader$uo_outware_move.sru forward global type uo_outware_move from nonvisualobject end type type s_outwaremx from structure within uo_outware_move end type end forward type s_outwaremx from structure long mtrlwareid long mtrlid long storageid decimal { 4 } qty string plancode decimal { 10 } cost string mtrlcode string mxdscrp long printid string status long scid integer dxflag long sptid string woodcode string pcode decimal { 10 } price decimal { 4 } addqty string unit string waredscrp datetime inworkdate string newplancode integer packqty decimal { 10 } cost_notax end type global type uo_outware_move from nonvisualobject end type global uo_outware_move uo_outware_move type variables public protectedwrite long outwareid //出仓单表自动增量id public protectedwrite string outwarecode //所有单据的唯一编号 public protectedwrite datetime opdate //建立时间,自动 public protectedwrite int flag=0 //仓库审核标志,默认0,审核时(变1)才减少库存 public protectedwrite datetime auditingdate //审核时间 public protectedwrite string auditingrep //审核操作员 public protectedwrite string operator //建立操作员 public protectedwrite datetime moddate //修改时间 public protectedwrite string modrep //修改操作员 long sstorageid //原仓库 long dstorageid //目标仓库 datetime outdate //进仓发生时间 string outrep='' //经手人 string dscrp='' //备注 string relcode = '' string reason //调拨原因 long d_auditflag = 0 private: s_outwaremx outwaremx[] //明细结构数组 long it_mxbt=0 //明细结构数组末指针 boolean it_newbegin=true //新建标志 boolean it_updatebegin=false//修改标志 end variables forward prototypes public function integer add_dscrp (string arg_newdescppart, ref string arg_msg) public function integer p_clearmx () public function integer p_reset () public function integer p_getinfo (long arg_outwareid, ref string arg_msg) public function integer newbegin (ref string arg_msg) public function integer cancel (long arg_outwareid, ref string arg_msg) public function integer getinfo (long arg_outwareid, ref string arg_msg) public function integer updatebegin (long arg_outwareid, ref string arg_msg) public function integer ss_auditing (string arg_auditingrep, ref string arg_msg) public function integer c_ss_auditing (ref string arg_msg) public function integer ds_auditing (string arg_auditingrep, ref string arg_msg) public function integer c_ds_auditing (ref string arg_msg) public function integer mod_price (long arg_scid, long arg_outwareid, long arg_printid, decimal arg_price, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer acceptmx (long arg_mtrlwareid, decimal arg_qty, decimal arg_addqty, decimal arg_price, ref string arg_msg, long arg_printid, string arg_mxdscrp, string arg_newplancode, integer arg_packqty) end prototypes public function integer add_dscrp (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 update u_outware_move set dscrp = dscrp+' '+:arg_newdescppart where u_outware_move.outwareid = :outwareid; if sqlca.sqlcode<>0 then rollback ; rslt=0 arg_msg="添加单据备注操作失败"+"~n"+sqlca.sqlerrtext goto ext end if commit; dscrp = dscrp+' '+arg_newdescppart ext: return (rslt) end function public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer p_reset ();//int p_reset() //清除对象及其明细 outwareid=0 outwarecode = '' flag=0 relcode = '' sstorageid = 0 dstorageid = 0 outrep='' dscrp='' it_newbegin=false it_updatebegin=false //清除明细 p_clearmx() return 1 end function public function integer p_getinfo (long arg_outwareid, ref string arg_msg);//getinfo(arg_outwareid,string arg_msg) //0 失败 1成功 Int rslt = 1 IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = "非法调拨单唯一码" GOTO ext END IF SELECT u_outware_move.outwarecode, u_outware_move.opdate, u_outware_move.operator, u_outware_move.flag, u_outware_move.auditingdate, u_outware_move.auditingrep, u_outware_move.moddate, u_outware_move.modrep, u_outware_move.outdate, u_outware_move.outrep, u_outware_move.dscrp, u_outware_move.sstorageid, u_outware_move.dstorageid, u_outware_move.relcode, u_outware_move.reason, u_outware_move.d_auditflag INTO :outwarecode, :opdate, :operator, :flag, :auditingdate, :auditingrep, :moddate, :modrep, :outdate, :outrep, :dscrp, :sstorageid, :dstorageid, :relcode, :reason, :d_auditflag FROM u_outware_move Where u_outware_move.outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败(错误出仓单唯一码),调拨单" GOTO ext END IF ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer newbegin (ref string arg_msg);//newbegin(INT arg_billtype,long arg_relid) //从置对象,设定业务类型与关联ID,准备建立新出仓单 //0 fail 1 success LONG RSLT=1,CNT=0 p_reset() it_newbegin=TRUE it_updatebegin=FALSE //EXT: IF RSLT=0 THEN p_reset() return RSLT end function public function integer cancel (long arg_outwareid, ref string arg_msg);//cancel() //如果单据还没有审核删除单据极其明细 //0 FAIL, 1 SUCCESS INT rslt=1 IF arg_outwareid<=0 THEN rslt=0 arG_MSG="没有删除对象,操作取消" goto ext END IF rslt=p_getinfo(arg_outwareid,arg_msg) if rslt=0 then goto ext IF flag=1 THEN rslt=0 arG_MSG="单据已经审核,不可以删除" goto ext END IF DELETE FROM u_outwaremovemx WHERE u_outwaremovemx.outwareid = :arg_outwareid; if sqlca.sqlcode<>0 then rslt=0 arG_MSG="删除进仓单明细操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; goto ext end if DELETE FROM u_outware_move WHERE u_outware_move.outwareid = :arg_outwareid; if sqlca.sqlcode<>0 then rslt=0 arG_MSG="删除进仓单操作失败"+"~n"+SQLCA.SQLErrText ROLLBACK; goto ext end if COMMIT; it_newbegin=FALSE it_updatebegin=FALSE EXT: p_reset() return (rslt) end function public function integer getinfo (long arg_outwareid, ref string arg_msg);//getinfo(long arg_outwareid,string arg_msg) //0 失败 1成功 int rslt=1,i=1,no_mxcheck=0 if arg_outwareid<=0 then rslt=0 arg_msg="非法调拨仓单唯一码" goto ext end if if p_getinfo(arg_outwareid,arg_msg) = 0 then rslt = 0 goto ext end if //用游标读取明细 declare cur_outwaermx cursor for select u_outwaremovemx.mtrlwareid, u_outwaremovemx.mtrlid, u_outwaremovemx.storageid, u_outwaremovemx.qty, u_outwaremovemx.addqty, u_outwaremovemx.cost, u_outwaremovemx.price, u_mtrldef.mtrlcode, u_mtrldef.unit, u_outwaremovemx.printid, u_outwaremovemx.mxdscrp, u_outwaremovemx.status, u_outwaremovemx.plancode, u_outwaremovemx.scid, u_outwaremovemx.dxflag, u_outwaremovemx.sptid, u_outwaremovemx.woodcode, u_outwaremovemx.pcode, u_outwaremovemx.waredscrp, u_outwaremovemx.inworkdate, u_outwaremovemx.newplancode, u_outwaremovemx.cost_notax from u_outwaremovemx,u_mtrldef where u_outwaremovemx.outwareid = :arg_outwareid and u_outwaremovemx.mtrlid=u_mtrldef.mtrlid; open cur_outwaermx; fetch cur_outwaermx into :outwaremx[i].mtrlwareid,:outwaremx[i].mtrlid, :outwaremx[i].storageid,:outwaremx[i].qty,:outwaremx[i].addqty, :outwaremx[i].cost,:outwaremx[i].price, :outwaremx[i].mtrlcode,:outwaremx[i].unit,:outwaremx[i].printid, :outwaremx[i].mxdscrp,:outwaremx[i].status, :outwaremx[i].plancode,:outwaremx[i].scid, :outwaremx[i].dxflag,:outwaremx[i].sptid, :outwaremx[i].woodcode,:outwaremx[i].pcode, :outwaremx[i].waredscrp, :outwaremx[i].inworkdate, :outwaremx[i].newplancode, :outwaremx[i].cost_notax; do while sqlca.sqlcode=0 i++ fetch cur_outwaermx into :outwaremx[i].mtrlwareid,:outwaremx[i].mtrlid, :outwaremx[i].storageid,:outwaremx[i].qty,:outwaremx[i].addqty, :outwaremx[i].cost,:outwaremx[i].price, :outwaremx[i].mtrlcode,:outwaremx[i].unit,:outwaremx[i].printid, :outwaremx[i].mxdscrp,:outwaremx[i].status, :outwaremx[i].plancode,:outwaremx[i].scid, :outwaremx[i].dxflag,:outwaremx[i].sptid, :outwaremx[i].woodcode,:outwaremx[i].pcode, :outwaremx[i].waredscrp, :outwaremx[i].inworkdate, :outwaremx[i].newplancode, :outwaremx[i].cost_notax; loop close cur_outwaermx; //检验明细是否读入完整 select count(*) into :no_mxcheck from u_outwaremovemx where u_outwaremovemx.outwareid = :arg_outwareid; 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 outwareid = arg_outwareid it_mxbt=i - 1 it_newbegin=false it_updatebegin=false ext: if rslt=0 then p_reset() return rslt end function public function integer updatebegin (long arg_outwareid, ref string arg_msg);//updatebegin(long arg_outwareid,int arg_billtype,long arg_relid) //从置对象,设定业务类型与关联id,准备更新出仓单 //0 fail 1 success Int rslt = 1,cnt = 0 IF arg_outwareid <= 0 THEN rslt = 0 outwareid = 0 GOTO ext END IF rslt = p_getinfo(arg_outwareid,arg_msg) IF rslt = 0 THEN GOTO ext IF flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改' GOTO ext END IF outwareid = arg_outwareid p_clearmx() it_newbegin = False it_updatebegin = True ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer ss_auditing (string arg_auditingrep, ref string arg_msg);//调仓单调出审核 //auditing(arg_auditingrep,arg_msg) //单据审核后生成一张原仓库调拨出仓单,目标仓库调拨入仓单 //0 fail 1 success Long rslt = 1,cnt = 0,i Long rst_outwareid //调拨出仓id Long s_scid Long o_scid uo_outware uo_out uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF outwareid = 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 flag = 1 THEN rslt = 0 arg_msg = "单据已经调出审核" GOTO ext END IF UPDATE u_outware_move SET auditingrep = :arg_auditingrep, auditingdate = getdate(), flag = 1 Where u_outware_move.outwareid = :outwareid 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 SELECT scid INTO :s_scid FROM u_storage Where storageid = :sstorageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF //2.原事务生成出仓单 IF uo_out.newbegin(s_scid,12,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = outwareid uo_out.outdate = outdate uo_out.outrep = outrep uo_out.part = outwarecode uo_out.dscrp = dscrp uo_out.cusname = '调拨出仓' uo_out.storageid = sstorageid FOR i = 1 To it_mxbt IF uo_out.acceptmx(outwaremx[i].mtrlwareid,& outwaremx[i].qty,outwaremx[i].addqty,outwaremx[i].cost,1,& outwaremx[i].mxdscrp,outwaremx[i].printid,arg_msg,0,0,0,0,0,0,0,outwaremx[i].unit,1,'','') = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_out.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_outwareid = uo_out.outwareid //4.原事务审核出仓单 IF uo_out.getinfo(s_scid,rst_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //更新出仓成本价 IF sys_option_outwaremove = 0 THEN //按出仓成本价 UPDATE u_outwaremovemx SET cost = u_outwaremx.cost, price = u_outwaremx.cost FROM u_OutWaremoveMx INNER JOIN u_outwaremx ON u_OutWaremoveMx.MtrlWareID = u_outwaremx.mtrlwareid WHERE (u_outwaremx.scid = :s_scid) And (u_outwaremx.outwareid = :rst_outwareid); ELSE UPDATE u_outwaremovemx SET cost = u_outwaremx.cost FROM u_OutWaremoveMx INNER JOIN u_outwaremx ON u_OutWaremoveMx.MtrlWareID = u_outwaremx.mtrlwareid WHERE (u_outwaremx.scid = :s_scid) And (u_outwaremx.outwareid = :rst_outwareid); END IF IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新调拨明细出仓成本价失败"+"~n"+sqlca.SQLErrText GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Destroy uo_out RETURN rslt end function public function integer c_ss_auditing (ref string arg_msg);//调仓单审核 //auditing(arg_auditingrep,arg_msg) //单据审核后生成一张原仓库调拨出仓单,目标仓库调拨入仓单 //0 fail 1 success Long rslt = 1,cnt = 0,i Long rst_outwareid //调拨出仓id Long rst_inwareid //调拨进仓id Long s_scid Long o_scid DateTime null_dt SetNull(null_dt) uo_outware uo_out uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF outwareid = 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 flag = 0 THEN rslt = 0 arg_msg = "单据未调出审核" GOTO ext END IF UPDATE u_outware_move SET auditingrep = '', auditingdate = :null_dt, flag = 0 Where u_outware_move.outwareid = :outwareid 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 SELECT scid INTO :s_scid FROM u_storage Where storageid = :sstorageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF //查询调仓单相关的出仓单 SELECT outwareid INTO :rst_outwareid FROM u_outware WHERE scid = :s_scid AND relid = :outwareid And billtype = 12; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该调仓单相关出仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //撤审出仓单,再删除 IF uo_out.getinfo(s_scid,rst_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.del(s_scid,rst_outwareid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Destroy uo_out RETURN rslt end function public function integer ds_auditing (string arg_auditingrep, ref string arg_msg);//调仓单调入审核 //auditing(arg_auditingrep,arg_msg) //单据审核后生成一张原仓库调拨出仓单,目标仓库调拨入仓单 //0 fail 1 success Long rslt = 1,cnt = 0,i Long rst_inwareid //调拨进仓id Long s_scid Long o_scid uo_inware uo_in uo_in = CREATE uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = FALSE IF outwareid = 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 d_auditflag = 1 THEN rslt = 0 arg_msg = "单据已经调入审核" GOTO ext END IF UPDATE u_outware_move SET d_auditingrep = :arg_auditingrep, d_auditingdate = getdate(), d_auditflag = 1 Where u_outware_move.outwareid = :outwareid AND d_auditflag = 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 SELECT scid INTO :o_scid FROM u_storage Where storageid = :dstorageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调入仓库所属分部资料失败' rslt = 0 GOTO ext END IF //3.目标事务建立进仓单 DateTime server_datetime SELECT Top 1 getdate() INTO :server_datetime FROM u_user; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询目标仓库日期失败" GOTO ext END IF IF uo_in.newbegin(o_scid,12,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = outwareid uo_in.indate = outdate uo_in.inrep = outrep uo_in.part = outwarecode uo_in.dscrp = dscrp uo_in.storageid = dstorageid uo_in.sptname = '调拨进仓' FOR i = 1 TO it_mxbt Decimal ld_price IF sys_option_outwaremove = 0 THEN ld_price = outwaremx[i].cost ELSE ld_price = outwaremx[i].price END IF IF uo_in.acceptmx(outwaremx[i].printid,& outwaremx[i].mtrlid,& outwaremx[i].mtrlcode,& outwaremx[i].newplancode,& outwaremx[i].status,& outwaremx[i].qty,& outwaremx[i].addqty,& ld_price,& 1,& outwaremx[i].mxdscrp,& arg_msg,& 0,0,0,0,outwaremx[i].woodcode,& outwaremx[i].pcode,& '',& outwaremx[i].sptid,outwaremx[i].unit,1,'',outwaremx[i].waredscrp,outwaremx[i].inworkdate,outwaremx[i].cost_notax) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_in.Save(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_inwareid = uo_in.inwareid //4.原事务审核进仓单 IF uo_in.getinfo(o_scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF d_auditflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY uo_in RETURN rslt end function public function integer c_ds_auditing (ref string arg_msg);//调仓单调入撤审 //auditing(arg_auditingrep,arg_msg) //单据审核后生成一张原仓库调拨出仓单,目标仓库调拨入仓单 //0 fail 1 success Long rslt = 1,cnt = 0,i Long rst_inwareid //调拨进仓id Long s_scid Long o_scid DateTime null_dt SetNull(null_dt) uo_inware uo_in uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False IF outwareid = 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 d_auditflag = 0 THEN rslt = 0 arg_msg = "单据未调入审核" GOTO ext END IF UPDATE u_outware_move SET d_auditingrep = '', d_auditingdate = :null_dt, d_auditflag = 0 Where u_outware_move.outwareid = :outwareid And d_auditflag = 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 SELECT scid INTO :o_scid FROM u_storage Where storageid = :dstorageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调入仓库所属分部资料失败' rslt = 0 GOTO ext END IF //查询调仓单相关的入仓单 SELECT top 1 inwareid INTO :rst_inwareid FROM u_inware WHERE scid = :o_scid AND relid = :outwareid And billtype = 12; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该调仓单相关入仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //撤审入仓单,再删除 IF uo_in.getinfo(o_scid,rst_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.c_auditing(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.del(o_scid,rst_inwareid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF d_auditflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Destroy uo_in RETURN rslt end function public function integer mod_price (long arg_scid, long arg_outwareid, long arg_printid, decimal arg_price, ref string arg_msg);Long rslt = 1 UPDATE u_OutWaremoveMx SET price = :arg_price WHERE outWareID = :arg_outwareid AND scid = :arg_scid AND Printid = :arg_printid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新单价操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer save (boolean arg_ifcommit, ref string arg_msg);//submit(string arg_msg) // 新建(outwareid=0)\更新(outwareid>0) //0 fail 1 success // // 函数执行出仓操作 // 函数在表 u_outware_move、u_outwaremovemx 记帐 // 1 检查单据信息合法性 // 2 新建-取得单据编号\新建出仓单\读取出仓单唯一码\插入明细 // 2 修改-更新出仓单\删除旧明细\插入明细 // 3 提交,修改状态标志 Integer rslt = 1,cnt = 0,i DateTime server_datetime Long ls_newid IF IsNull(dscrp) THEN dscrp = '' IF IsNull(outrep) THEN outrep = '' IF IsNull(relcode) THEN relcode = '' IF IsNull(reason) THEN reason = '' 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 outrep = '' THEN rslt = 0 arg_msg = '请输入经手人' GOTO ext END IF IF Year(Date(outdate)) < 2000 Or IsNull(outdate) THEN rslt = 0 arg_msg = "缺少出仓发生时间或不合理" GOTO ext END IF //检查仓库 cnt = 0 SELECT count(*) Into :cnt From u_storage Where storageid = :sstorageid; 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_storage Where storageid = :dstorageid; 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 outwareid = 0 THEN //新建 ls_newid = f_sys_scidentity(sys_scid,"u_outware_move","outwareid",arg_msg,True,sqlca) IF ls_newid <= 0 THEN rslt = 0 ROLLBACK; GOTO ext END IF outwarecode = getid(sys_scid,"MV",Date(server_datetime),True,sqlca) //取得新单据编号 IF outwarecode = "err" THEN outwarecode = '' rslt = 0 arg_msg = "无法获取出仓单编号" GOTO ext END IF INSERT INTO u_outware_move ( outwareid, outwarecode, sstorageid, dstorageid, opdate, operator, flag, outdate, outrep, dscrp, relcode, reason) VALUES ( :ls_newid, :outwarecode, :sstorageid, :dstorageid, :server_datetime, :publ_operator, :flag, :outdate, :outrep, :dscrp, :relcode, :reason) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入单据失败,'+sqlca.SQLErrText GOTO ext END IF outwareid = ls_newid ELSE //////////////////////////////////////////////// //更新 UPDATE u_outware_move SET outdate = :outdate, outrep = :outrep, dscrp = :dscrp, sstorageid = :sstorageid, dstorageid = :dstorageid, relcode = :relcode, modrep = :publ_operator, moddate = getdate(), reason = :reason Where u_outware_move.outwareid = :outwareid And flag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_outwaremovemx Where u_outwaremovemx.outwareid = :outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF // FOR i = 1 To it_mxbt // INSERT INTO u_outwaremovemx // ( outwareid, // mtrlwareid, // mtrlid, // storageid, // qty, // addqty, // cost, // price, // printid, // mxdscrp, // scid, // status, // plancode, // dxflag, // sptid, // woodcode, // pcode, // waredscrp, // inworkdate, // newplancode) // VALUES (:outwareid, // :outwaremx[i].mtrlwareid, // :outwaremx[i].mtrlid, // :outwaremx[i].storageid, // :outwaremx[i].qty, // :outwaremx[i].addqty, // :outwaremx[i].cost, // :outwaremx[i].price, // :outwaremx[i].printid, // :outwaremx[i].mxdscrp, // :outwaremx[i].scid, // :outwaremx[i].status, // :outwaremx[i].plancode, // :outwaremx[i].dxflag, // :outwaremx[i].sptid, // :outwaremx[i].woodcode, // :outwaremx[i].pcode, // :outwaremx[i].waredscrp, // :outwaremx[i].inworkdate, // :outwaremx[i].newplancode); // // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // IF Pos(Lower(sqlca.SQLErrText),'PK_u_outwaremovemx') > 0 THEN // arg_msg = '插入单据明细资料失败,关键字ID,序号重复' // ELSE // arg_msg = '因网络或其他原因导致插入单据明细资料失败,'+sqlca.SQLErrText // END IF // GOTO ext // END IF // NEXT END IF FOR i = 1 To it_mxbt INSERT INTO u_outwaremovemx (outwareid, mtrlwareid, mtrlid, storageid, qty, addqty, cost, price, printid, mxdscrp, scid, status, plancode, dxflag, sptid, woodcode, pcode, waredscrp, inworkdate, newplancode, packqty, cost_notax) VALUES (:outwareid, :outwaremx[i].mtrlwareid, :outwaremx[i].mtrlid, :outwaremx[i].storageid, :outwaremx[i].qty, :outwaremx[i].addqty, :outwaremx[i].cost, :outwaremx[i].price, :outwaremx[i].printid, :outwaremx[i].mxdscrp, :outwaremx[i].scid, :outwaremx[i].status, :outwaremx[i].plancode, :outwaremx[i].dxflag, :outwaremx[i].sptid, :outwaremx[i].woodcode, :outwaremx[i].pcode, :outwaremx[i].waredscrp, :outwaremx[i].inworkdate, :outwaremx[i].newplancode, :outwaremx[i].packqty, :outwaremx[i].cost_notax); IF sqlca.SQLCode <> 0 THEN IF it_newbegin THEN outwareid = 0 //还原outwareid rslt = 0 arg_msg = '插入单据明细失败,'+sqlca.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer acceptmx (long arg_mtrlwareid, decimal arg_qty, decimal arg_addqty, decimal arg_price, ref string arg_msg, long arg_printid, string arg_mxdscrp, string arg_newplancode, integer arg_packqty);//acceptmx(arg_mtrlwareid,arg_qty,arg_msg,arg_printid,arg_mxdscrp) //return 0 fail 1 success // 函数增加出仓单的一个出仓明细项 Long rslt = 1,cnt = 0,ls_i Long i_mtrlid,i_storageid,i_scid String i_mtrlcode,i_status,i_plancode,i_woodcode,i_pcode Decimal i_cost,i_cost_notax Int i_dxflag Long i_sptid Decimal i_notauditqty,i_allouseqty String i_waredscrp DateTime i_inworkdate IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF //清除空值 IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_price) THEN arg_price = 0 IF isnull(arg_packqty) then arg_packqty = 0 IF arg_mtrlwareid = 0 Or arg_qty = 0 THEN // 如果出仓数量为 0,或物料编号为空,则不作任何处理 rslt = 1 GOTO ext END IF //检查物料库存id SELECT u_mtrlware.mtrlid, u_mtrlware.storageid, u_mtrlware.cost, u_mtrldef.mtrlcode, u_mtrlware.plancode, u_mtrlware.status, u_mtrlware.scid, u_mtrlware.dxflag, u_mtrlware.sptid, u_mtrlware.woodcode, u_mtrlware.pcode, isnull(uv_mtrlware_noauditingqty.noauditingqty,0), u_mtrlware.noallocqty, u_mtrlware.waredscrp, u_mtrlware.inworkdate, u_mtrlware.cost_notax INTO :i_mtrlid, :i_storageid, :i_cost, :i_mtrlcode, :i_plancode, :i_status, :i_scid, :i_dxflag, :i_sptid, :i_woodcode, :i_pcode, :i_notauditqty, :i_allouseqty, :i_waredscrp, :i_inworkdate, :i_cost_notax FROM u_mtrlware left OUTER join uv_mtrlware_noauditingqty on ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid) AND ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid),u_mtrldef WHERE ( u_mtrlware.mtrlwareid = :arg_mtrlwareid ) AND ( u_mtrlware.mtrlid = u_mtrldef.mtrlid ) And ( u_mtrlware.storageid = :sstorageid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,库存编号错误" GOTO ext END IF //检查成本价调整单 cnt = 0 SELECT count(*) INTO :cnt FROM u_updatecost,u_updatecostmx WHERE u_updatecost.wareid = u_updatecostmx.wareid AND u_updatecost.flag = 0 AND u_updatecostmx.mtrlwareid = :arg_mtrlwareid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行,查询成本价调整单操作失败" GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + "行," + i_mtrlcode + "已开成本价调整单,请先审核" GOTO ext END IF IF IsNull(i_cost) THEN i_cost = 0 IF IsNull(i_cost_notax) THEN i_cost_notax = 0 IF IsNull(i_mtrlid) THEN i_mtrlid = 0 IF IsNull(i_storageid) THEN i_storageid = 0 IF IsNull(i_status) THEN i_status = '' IF IsNull(i_plancode) THEN i_plancode = '' IF IsNull(i_scid) THEN i_scid = 0 IF IsNull(i_dxflag) THEN i_dxflag = 0 IF IsNull(i_sptid) THEN i_sptid = 0 IF IsNull(i_pcode) THEN i_pcode = '' //*****检查大于未开数不可以开单 IF flag = 0 THEN Int ls_noallocflag Decimal ol_mtrl_qty = 0 SELECT noallocflag INTO :ls_noallocflag FROM u_storage Where storageid = :sstorageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库允许使用未开单库存属性失败'+sqlca.SQLErrText GOTO ext END IF IF ls_noallocflag = 1 THEN IF it_updatebegin THEN SELECT u_outwaremovemx.qty INTO :ol_mtrl_qty FROM u_outwaremovemx WHERE u_outwaremovemx.outwareid = :outwareid And u_outwaremovemx.mtrlwareid = :arg_mtrlwareid; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询原开单数量失败' GOTO ext END IF END IF IF arg_qty > ( i_allouseqty - i_notauditqty + ol_mtrl_qty ) THEN rslt = 0 arg_msg = String(i_mtrlcode)+"库存未开单数不够,不能开单.未开单数{"+String(i_allouseqty - i_notauditqty + ol_mtrl_qty,'#####,0.00##')+"}" GOTO ext END IF END IF END IF //*********************************************** //写入内容 it_mxbt++ outwaremx[it_mxbt].scid = i_scid outwaremx[it_mxbt].mtrlwareid = arg_mtrlwareid outwaremx[it_mxbt].mtrlid = i_mtrlid outwaremx[it_mxbt].qty = arg_qty outwaremx[it_mxbt].addqty = arg_addqty outwaremx[it_mxbt].storageid = i_storageid outwaremx[it_mxbt].cost = i_cost outwaremx[it_mxbt].cost_notax = i_cost_notax outwaremx[it_mxbt].mtrlcode = i_mtrlcode outwaremx[it_mxbt].printid = arg_printid outwaremx[it_mxbt].mxdscrp = arg_mxdscrp outwaremx[it_mxbt].status = i_status outwaremx[it_mxbt].plancode = i_plancode outwaremx[it_mxbt].dxflag = i_dxflag outwaremx[it_mxbt].sptid = i_sptid outwaremx[it_mxbt].woodcode = i_woodcode outwaremx[it_mxbt].pcode = i_pcode outwaremx[it_mxbt].price = arg_price outwaremx[it_mxbt].waredscrp = i_waredscrp outwaremx[it_mxbt].inworkdate = i_inworkdate outwaremx[it_mxbt].newplancode = arg_newplancode outwaremx[it_mxbt].packqty = arg_packqty ext: IF rslt = 0 THEN p_clearmx() arg_msg = "第" + String(arg_printid) + "行," + arg_msg END IF Return(rslt) end function on uo_outware_move.create call super::create TriggerEvent( this, "constructor" ) end on on uo_outware_move.destroy TriggerEvent( this, "destructor" ) call super::destroy end on