$PBExportHeader$uo_dismantle_install.sru forward global type uo_dismantle_install from nonvisualobject end type type s_dismantle_install from structure within uo_dismantle_install end type end forward type s_dismantle_install from structure long printid long storageid long mtrlwareid long mtrlid decimal { 5 } qty decimal { 10 } price string status string plancode string woodcode string mxdscrp string mtrlcode string pcode integer dxflag long sptid long standardqty decimal { 5 } addqty string unit end type global type uo_dismantle_install from nonvisualobject end type global uo_dismantle_install uo_dismantle_install type variables PUBLIC PROTECTEDWRITE Long billid PUBLIC PROTECTEDWRITE String billcode PUBLIC PROTECTEDWRITE DateTime opdate PUBLIC PROTECTEDWRITE String opemp PUBLIC PROTECTEDWRITE DateTime moddate PUBLIC PROTECTEDWRITE String modemp PUBLIC PROTECTEDWRITE Int flag PUBLIC PROTECTEDWRITE DateTime auditingdate PUBLIC PROTECTEDWRITE String auditingrep PUBLIC PROTECTEDWRITE Int billtype DateTime billdate Long relid String reason Long storageid Long mtrlid Long mtrlwareid String status String pcode String plancode String woodcode String dscrp Decimal qty Decimal addqty Int buildtype String rep Decimal price String mtrlcode int dxflag long sptid string unit //long printid //string mxdscrp //decimal standardqty Boolean sysautobuild = FALSE //自动操作标记 Boolean if_getid_ture = TRUE PRIVATE: s_dismantle_install d_i[] //明细结构数组 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 updatebegin (long arg_billid, ref string arg_msg) public function integer save (ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg) public function integer p_getinfo (long arg_billid, ref string arg_msg) public function integer getinfo (long arg_billid, ref string arg_msg) public function integer auditing (string arg_auditingrep, boolean arg_ifcommit, ref string arg_msg) public function integer newbegin (integer arg_billtype, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_storageid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, decimal arg_addqty, decimal arg_price, string arg_status, string arg_plancode, string arg_woodcode, string arg_mxdscrp, string arg_mtrlcode, string arg_pcode, integer arg_dxflag, integer arg_sptid, ref string arg_msg, decimal arg_standardqty) public function integer del (long arg_billid, boolean arg_ifcommit, ref string arg_msg) 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() //清除对象及其明细 billid = 0 billcode = '' opemp = '' auditingrep = '' flag = 0 relid = 0 reason = '' storageid = 0 mtrlid = 0 mtrlwareid = 0 status = '' plancode = '' woodcode = '' dscrp = '' qty = 0 addqty=0 it_newbegin = FALSE it_updatebegin = FALSE //清除明细 P_CLEARMX() RETURN 1 end function public function integer updatebegin (long arg_billid, ref string arg_msg);int rslt = 1 if arg_billid <= 0 then billid = 0 goto ext end if if p_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 buildtype = 1 then rslt = 0 arg_msg = '单据为自动建立单据,不可以修改' goto ext end if billid = arg_billid 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_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,i,cnt = 0 DateTime server_dt Long ls_newid IF IsNull(reason) THEN reason = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(plancode) THEN plancode = '' IF IsNull(relid) THEN relid = 0 IF IsNull(woodcode) THEN woodcode = '' IF mtrlid = 0 THEN rslt = 0 arg_msg = '非法物料!' GOTO ext END IF IF qty = 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_dt 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 billid = 0 THEN //新建 ls_newid = f_sys_scidentity(0,"u_dismantle_install","billid",arg_msg,if_getid_ture,sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF billcode = getid(0,"CZ",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取拆装单编号" GOTO ext END IF // INSERT INTO u_dismantle_install (billid, billtype, billcode, reason, billdate, relid, storageid, mtrlid, mtrlwareid, status, plancode, woodcode, qty, dscrp, buildtype, price, rep, opemp, pcode, dxflag, sptid, addqty) VALUES( :ls_newid, :billtype, :billcode, :reason, :billdate, :relid, :storageid, :mtrlid, :mtrlwareid, :status, :plancode, :woodcode, :qty, :dscrp, :buildtype, :price, :rep, :publ_operator, :pcode, :dxflag, :sptid, :addqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'PK_u_dismantle_install') > 0 THEN arg_msg = '插入操作失败,关键字单据ID重复' ELSEIF Pos(Lower(sqlca.SQLErrText),'IX_u_dismantle_install') > 0 THEN arg_msg = '插入操作失败,单据编号重复' ELSE arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+sqlca.SQLErrText END IF GOTO ext END IF billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_dismantle_installmx ( billid , printid, storageid , mtrlwareid , mtrlid , qty , price, status , plancode, woodcode , mxdscrp, pcode, dxflag, sptid, standardqty, addqty) VALUES (:ls_newid, :d_i[i].printid, :d_i[i].storageid, :d_i[i].mtrlwareid, :d_i[i].mtrlid, :d_i[i].qty, :d_i[i].price, :d_i[i].status, :d_i[i].plancode, :d_i[i].woodcode, :d_i[i].mxdscrp, :d_i[i].pcode, :d_i[i].dxflag, :d_i[i].sptid, :d_i[i].standardqty, :d_i[i].addqty); IF sqlca.SQLCode <> 0 THEN billid = 0 //还原billid rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'PK_u_dismantle_installmx') > 0 THEN arg_msg = '插入明细操作失败,关键字单据ID,序号重复' ELSE arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText END IF ROLLBACK ; GOTO ext END IF NEXT // ELSE //////////////////////////////////////////////////更新 UPDATE u_dismantle_install SET billtype = :billtype, reason = :reason, billdate = :billdate, relid = :relid, storageid = :storageid, mtrlid = :mtrlid, mtrlwareid = :mtrlwareid, status = :status, plancode = :plancode, woodcode = :woodcode, qty = :qty, dscrp = :dscrp, buildtype = :buildtype, moddate = getdate(), modemp = :publ_operator, price = :price, rep = :rep, pcode = :pcode, dxflag = :dxflag, sptid = :sptid, addqty = :addqty WHERE u_dismantle_install.billid = :billid AND Auditingflag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_dismantle_installmx Where u_dismantle_installmx.billid = :billid; 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_dismantle_installmx ( billid , printid, storageid , mtrlwareid , mtrlid , qty , price, status , plancode, woodcode , mxdscrp, pcode, dxflag, sptid , standardqty, addqty) VALUES (:billid, :d_i[i].printid, :d_i[i].storageid, :d_i[i].mtrlwareid, :d_i[i].mtrlid, :d_i[i].qty, :d_i[i].price, :d_i[i].status, :d_i[i].plancode, :d_i[i].woodcode, :d_i[i].mxdscrp, :d_i[i].pcode, :d_i[i].dxflag, :d_i[i].sptid, :d_i[i].standardqty, :d_i[i].addqty); IF sqlca.SQLCode <> 0 THEN billid = 0 //还原billid rslt = 0 IF Pos(Lower(sqlca.SQLErrText),'PK_u_dismantle_installmx') > 0 THEN arg_msg = '插入明细操作失败,关键字单据ID,序号重复' ELSE arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText END IF ROLLBACK ; GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return(rslt) end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//==================================================================== // Function: add_dscrp(arg_billid,arg_newdescppart,arg_msg) //-------------------------------------------------------------------- // Description: //-------------------------------------------------------------------- // Arguments: // value long arg_billid // value string arg_newdescppart // reference string arg_msg //-------------------------------------------------------------------- // Returns: integer //-------------------------------------------------------------------- // Author: yyx Date: 2003.11.21 //-------------------------------------------------------------------- // Modify History: // //==================================================================== int rslt = 1 arg_newdescppart = trim(arg_newdescppart) 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_dismantle_install.auditingflag into :flag from u_dismantle_install where u_dismantle_install.billid = :arg_billid; if sqlca.sqlcode <> 0 then rslt = 0 arg_msg = '查询拆装件单操作失败' goto ext end if if flag = 0 then rslt = 0 arg_msg = "非审核状态下不可用" goto ext end if update u_dismantle_install set dscrp = dscrp+' '+:arg_newdescppart where u_dismantle_install.billid = :billid; 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_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arG_MSG = "非法单据唯一码" GOTO ext END IF SELECT u_dismantle_install.billtype, u_dismantle_install.Billcode, u_dismantle_install.reason, u_dismantle_install.relid, u_dismantle_install.storageid, u_dismantle_install.mtrlid, u_dismantle_install.mtrlwareid, u_dismantle_install.status, u_dismantle_install.plancode, u_dismantle_install.woodcode, u_dismantle_install.qty, u_dismantle_install.addqty, u_dismantle_install.Dscrp, u_dismantle_install.Auditingflag, u_dismantle_install.buildtype, u_dismantle_install.price, u_dismantle_install.billdate, u_dismantle_install.rep, u_mtrldef.mtrlcode, u_mtrldef.unit, u_dismantle_install.pcode, u_dismantle_install.dxflag, u_dismantle_install.sptid INTO :billtype, :Billcode, :reason, :relid, :storageid, :mtrlid, :mtrlwareid, :status, :plancode, :woodcode, :qty, :addqty, :Dscrp, :flag, :buildtype, :price, :billdate, :rep, :mtrlcode, :unit, :pcode, :dxflag, :sptid FROM u_dismantle_install,u_mtrldef Where u_mtrldef.mtrlid = u_dismantle_install.mtrlid and billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误单据唯一码)"+sqlca.SQLErrText GOTO ext END IF billid = arg_billid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 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 //用游标读取明细 DECLARE cur_d_i_mx CURSOR FOR SELECT u_dismantle_installmx.printid, u_dismantle_installmx.storageid, u_dismantle_installmx.mtrlwareid, u_dismantle_installmx.mtrlid, u_dismantle_installmx.qty, u_dismantle_installmx.addqty, u_dismantle_installmx.price, u_dismantle_installmx.status, u_dismantle_installmx.plancode, u_dismantle_installmx.woodcode, u_dismantle_installmx.mxdscrp, u_mtrldef.mtrlcode, u_mtrldef.unit, u_dismantle_installmx.pcode, u_dismantle_installmx.dxflag, u_dismantle_installmx.sptid, u_dismantle_installmx.standardqty FROM u_dismantle_installmx left join u_mtrldef on u_dismantle_installmx.mtrlid = u_mtrldef.mtrlid WHERE u_dismantle_installmx.billid = :arg_billid; OPEN cur_d_i_mx; FETCH cur_d_i_mx INTO :d_i[i].printid,:d_i[i].storageid, :d_i[i].mtrlwareid,:d_i[i].mtrlid,:d_i[i].qty,:d_i[i].addqty, :d_i[i].price,:d_i[i].status,:d_i[i].plancode, :d_i[i].woodcode,:d_i[i].mxdscrp,:d_i[i].mtrlcode,:d_i[i].unit, :d_i[i].pcode,:d_i[i].dxflag,:d_i[i].sptid, :d_i[i].standardqty; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_d_i_mx INTO :d_i[i].printid,:d_i[i].storageid, :d_i[i].mtrlwareid,:d_i[i].mtrlid,:d_i[i].qty,:d_i[i].addqty, :d_i[i].price,:d_i[i].status,:d_i[i].plancode, :d_i[i].woodcode,:d_i[i].mxdscrp,:d_i[i].mtrlcode,:d_i[i].unit, :d_i[i].pcode,:d_i[i].dxflag,:d_i[i].sptid, :d_i[i].standardqty; LOOP CLOSE cur_d_i_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_dismantle_installmx Where u_dismantle_installmx.billid = :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 billid = 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 auditing (string arg_auditingrep, boolean arg_ifcommit, ref string arg_msg);Long cnt = 0,i Int rslt = 1 Long chc Long rst_outwareid //拆装出仓id Long rst_inwareid //拆装进仓id Long s_scid Long o_scid Long lay_storageid[],ll_storageid s_dismantle_install s_di[] datetime ld_inworkdate setnull(ld_inworkdate) uo_inware uo_in uo_outware uo_out uo_in = CREATE uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = FALSE uo_out = CREATE uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = FALSE IF 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 IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核" GOTO ext END IF UPDATE u_dismantle_install SET Auditingemp = :arg_auditingrep, auditingdate = getdate(), Auditingflag = 1 Where u_dismantle_install.billid = :billid AND Auditingflag = 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 Boolean lb_f = FALSE Long j,k,ch //统计仓库数量,确定进或出仓单数 FOR i = 1 TO it_mxbt FOR j = 1 TO UpperBound(lay_storageid) IF lay_storageid[j] = d_i[i].storageid THEN lb_f = TRUE NEXT IF lb_f = FALSE THEN ch++ lay_storageid[ch] = d_i[i].storageid END IF lb_f = FALSE NEXT IF billtype = 0 THEN //装单 //多张出仓单 //一进多出 //1.原事务生成出仓单 FOR k = 1 TO UpperBound(lay_storageid) ll_storageid = lay_storageid[k] SELECT scid INTO :s_scid FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF IF uo_out.newbegin(s_scid,15,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = billid uo_out.outdate = billdate uo_out.outrep = rep uo_out.part = billcode uo_out.dscrp = dscrp uo_out.cusname = '拆装出仓' uo_out.storageid = ll_storageid chc = 0 // d_i[i].printid FOR i = 1 TO it_mxbt IF d_i[i].storageid <> ll_storageid THEN CONTINUE chc++ IF uo_out.acceptmx(d_i[i].mtrlwareid,& d_i[i].qty,d_i[i].addqty,d_i[i].price,1,& d_i[i].mxdscrp,chc,arg_msg,0,0,0,0,0,0,0,d_i[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 //2.原事务审核出仓单 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 NEXT //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 SELECT scid INTO :o_scid FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调进仓库所属分部资料失败' rslt = 0 GOTO ext END IF IF uo_in.newbegin(o_scid,15,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = billid uo_in.indate = billdate uo_in.inrep = rep uo_in.part = billcode uo_in.dscrp = dscrp uo_in.storageid = storageid uo_in.sptname = '拆装进仓' IF uo_in.acceptmx(1,& mtrlid,& mtrlcode,& plancode,& status,& qty,addqty,& price,& 1,& dscrp,& arg_msg,& 0,0,0,0,woodcode,pcode,'',sptid,unit,1,'','',ld_inworkdate,0) = 0 THEN rslt = 0 GOTO ext END IF 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 ELSEIF billtype = 1 THEN //拆单 //多张进仓单 //一出多进 //1.原事务生成出仓单 SELECT scid INTO :s_scid FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF IF uo_out.newbegin(s_scid,15,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_out.relid = billid uo_out.outdate = billdate uo_out.outrep = rep uo_out.part = billcode uo_out.dscrp = dscrp uo_out.cusname = '拆装出仓' uo_out.storageid = storageid IF uo_out.acceptmx(mtrlwareid,& qty,addqty,price,1,& dscrp,1,arg_msg,0,0,0,0,0,0,0,unit,1,'','') = 0 THEN rslt = 0 GOTO ext END IF IF uo_out.Save(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF rst_outwareid = uo_out.outwareid //2.原事务审核出仓单 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 FOR k = 1 TO UpperBound(lay_storageid) ll_storageid = lay_storageid[k] SELECT scid INTO :o_scid FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调进仓库所属分部资料失败' rslt = 0 GOTO ext END IF IF uo_in.newbegin(o_scid,15,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_in.relid = billid uo_in.indate = billdate uo_in.inrep = rep uo_in.part = billcode uo_in.dscrp = dscrp uo_in.storageid = ll_storageid//storageid uo_in.sptname = '拆装进仓' chc = 0 // d_i[i].printid FOR i = 1 TO it_mxbt IF d_i[i].storageid <> ll_storageid THEN CONTINUE chc++ IF uo_in.acceptmx(chc,& d_i[i].mtrlid,& d_i[i].mtrlcode,& d_i[i].plancode,& d_i[i].status,& d_i[i].qty,& d_i[i].addqty,& d_i[i].price,& 1,& d_i[i].mxdscrp,& arg_msg,& 0,0,0,0,d_i[i].woodcode,d_i[i].pcode,'',d_i[i].sptid,d_i[i].unit,1,'','',ld_inworkdate,0) = 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 NEXT END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF DESTROY uo_in DESTROY uo_out RETURN rslt end function public function integer newbegin (integer arg_billtype, ref string arg_msg);Int rslt = 1 IF Not (arg_billtype = 0 OR arg_billtype = 1) THEN rslt = 0 arg_msg = '此单据类型必须为:0-装仓,1-拆仓' GOTO ext END IF p_reset() billtype = arg_billtype it_newbegin = TRUE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long cnt = 0,i Int rslt = 1 Long chc Long in_out Long rst_outwareid[],out_i = 1 //拆装出仓id Long rst_inwareid[],in_i = 1 //拆装进仓id Long s_scid Long o_scid Long lay_storageid[],ll_storageid s_dismantle_install s_di[] DateTime null_dt SetNull(null_dt) uo_inware uo_in uo_outware uo_out uo_in = Create uo_inware uo_in.commit_transaction = sqlca uo_in.if_getid_ture = False uo_out = Create uo_outware uo_out.commit_transaction = sqlca uo_out.if_getid_ture = False IF 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 IF flag = 0 THEN rslt = 0 arg_msg = "单据未审核" GOTO ext END IF IF Not sysautobuild THEN IF sys_option_outware_if_di <> 0 THEN IF Pos(reason, '自动组装') > 0 and Pos(reason, '销售发货单') > 0 THEN rslt = 0 arg_msg = "系统选项[084]限制,销售发货单自动组装单据不能手动撤审" GOTO ext END IF END IF END IF UPDATE u_dismantle_install SET Auditingemp = '', auditingdate = :null_dt, Auditingflag = 0 Where u_dismantle_install.billid = :billid And Auditingflag = 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 Boolean lb_f = False Long j,k,ch //统计仓库数量,确定进或出仓单数 FOR i = 1 To it_mxbt FOR j = 1 To UpperBound(lay_storageid) IF lay_storageid[j] = d_i[i].storageid THEN lb_f = True NEXT IF lb_f = False THEN ch++ lay_storageid[ch] = d_i[i].storageid END IF lb_f = False NEXT IF billtype = 0 THEN //装单 //多张出仓单 //1.查询拆装单相关的出仓单,撤审,删除 FOR k = 1 To UpperBound(lay_storageid) ll_storageid = lay_storageid[k] SELECT scid INTO :s_scid FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF DECLARE cur_out_1 CURSOR FOR SELECT outwareid FROM u_outware WHERE scid = :s_scid AND relid = :billid AND storageid = :ll_storageid And billtype = 15; OPEN cur_out_1; FETCH cur_out_1 Into :rst_outwareid[out_i]; DO WHILE sqlca.SQLCode = 0 out_i++ FETCH cur_out_1 Into :rst_outwareid[out_i]; LOOP out_i = out_i - 1 CLOSE cur_out_1; IF out_i = 0 THEN arg_msg = '查询该拆装单相关出仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR in_out = 1 To out_i //撤审出仓单,再删除 IF uo_out.getinfo(s_scid,rst_outwareid[in_out],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[in_out],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT NEXT //2.查询拆装单相关的入仓单,撤审,删除 SELECT scid INTO :o_scid FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调进仓库所属分部资料失败' rslt = 0 GOTO ext END IF DECLARE cur_in_1 CURSOR FOR SELECT inwareid FROM u_inware WHERE scid = :o_scid AND relid = :billid AND storageid = :storageid And billtype = 15; OPEN cur_in_1; FETCH cur_in_1 Into :rst_inwareid[in_i]; DO WHILE sqlca.SQLCode = 0 in_i++ FETCH cur_in_1 Into :rst_inwareid[in_i]; LOOP in_i = in_i - 1 CLOSE cur_in_1; IF in_i = 0 THEN arg_msg = '查询该拆装单相关入仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR in_out = 1 To in_i //撤审出仓单,再删除 IF uo_in.getinfo(o_scid,rst_inwareid[in_out],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[in_out],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ELSEIF billtype = 1 THEN //拆单 //多张进仓单 //1.查询拆装单相关的出仓单,撤审,删除 SELECT scid INTO :s_scid FROM u_storage Where storageid = :storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF DECLARE cur_out_2 CURSOR FOR SELECT outwareid FROM u_outware WHERE scid = :s_scid AND relid = :billid AND storageid = :storageid And billtype = 15; OPEN cur_out_2; FETCH cur_out_2 Into :rst_outwareid[out_i]; DO WHILE sqlca.SQLCode = 0 out_i++ FETCH cur_out_2 Into :rst_outwareid[out_i]; LOOP out_i = out_i - 1 CLOSE cur_out_2; IF out_i = 0 THEN arg_msg = '查询该拆装单相关出仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR in_out = 1 To out_i //撤审出仓单,再删除 IF uo_out.getinfo(s_scid,rst_outwareid[in_out],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[in_out],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT //2.查询拆装单相关的入仓单,撤审,删除 FOR k = 1 To UpperBound(lay_storageid) ll_storageid = lay_storageid[k] SELECT scid INTO :o_scid FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询调出仓库所属分部资料失败' rslt = 0 GOTO ext END IF DECLARE cur_in_2 CURSOR FOR SELECT inwareid FROM u_inware WHERE scid = :o_scid AND relid = :billid AND storageid = :ll_storageid And billtype = 15; OPEN cur_in_2; FETCH cur_in_2 Into :rst_inwareid[in_i]; DO WHILE sqlca.SQLCode = 0 in_i++ FETCH cur_in_2 Into :rst_inwareid[in_i]; LOOP in_i = in_i - 1 CLOSE cur_in_2; IF in_i = 0 THEN arg_msg = '查询该拆装单相关入仓单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR in_out = 1 To in_i //撤审入仓单,再删除 IF uo_in.getinfo(o_scid,rst_inwareid[in_out],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[in_out],arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT NEXT END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Destroy uo_in Destroy uo_out RETURN rslt end function public function integer acceptmx (long arg_printid, long arg_storageid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, decimal arg_addqty, decimal arg_price, string arg_status, string arg_plancode, string arg_woodcode, string arg_mxdscrp, string arg_mtrlcode, string arg_pcode, integer arg_dxflag, integer arg_sptid, ref string arg_msg, decimal arg_standardqty);//arg_printid,arg_storageid,arg_mtrlwareid,arg_mtrlid,arg_qty,arg_price,arg_status,arg_plancode,arg_woodcode,arg_mxdscrp,arg_mtrlcode,arg_msg Long rslt = 1,cnt = 0,ls_i IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN rslt = 0 arg_msg = "非编辑状态不可以使用,操作取消" GOTO ext END IF IF IsNull(arg_printid) THEN arg_printid = 0 IF IsNull(arg_storageid) THEN arg_storageid = 0 IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0 IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_addqty) THEN arg_qty = 0 IF IsNull(arg_standardqty) THEN arg_standardqty = 0 IF IsNull(arg_price) THEN arg_price = 0 IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_dxflag) THEN arg_dxflag = 0 IF IsNull(arg_sptid) THEN arg_sptid = 0 IF arg_qty = 0 THEN rslt = 1 GOTO ext END IF IF arg_mtrlwareid > 0 AND billtype = 0 THEN SELECT plancode, woodcode, status, pcode, dxflag, sptid, cost // cost = case u_mtrlware.noallocqty when 0 then 0 else u_mtrlware.wareamt/u_mtrlware.noallocqty END INTO :arg_plancode, :arg_woodcode, :arG_status, :arg_pcode, :arg_dxflag, :arg_sptid, :arg_price FROM u_mtrlware Where u_mtrlware.mtrlwareid = :arg_mtrlwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "第" + String(arg_printid) + '行,查询物料 '+arg_mtrlcode+' 库存失败!>>'+sqlca.SQLErrText 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) + "行," + arg_mtrlcode + "已开成本价调整单,请先审核" GOTO ext END IF END IF //写入内容 it_mxbt++ d_i[it_mxbt].printid = arg_printid d_i[it_mxbt].storageid = arg_storageid d_i[it_mxbt].mtrlwareid = arg_mtrlwareid d_i[it_mxbt].mtrlid = arg_mtrlid d_i[it_mxbt].qty = arg_qty d_i[it_mxbt].addqty = arg_addqty d_i[it_mxbt].price = arg_price d_i[it_mxbt].status = arg_status d_i[it_mxbt].plancode = arg_plancode d_i[it_mxbt].woodcode = arg_woodcode d_i[it_mxbt].mxdscrp = arg_mxdscrp d_i[it_mxbt].mtrlcode = arg_mtrlcode d_i[it_mxbt].pcode = arg_pcode d_i[it_mxbt].dxflag = arg_dxflag d_i[it_mxbt].sptid = arg_sptid d_i[it_mxbt].standardqty = arg_standardqty ext: IF rslt = 0 THEN p_clearmx() Return(rslt) end function public function integer del (long arg_billid, boolean arg_ifcommit, 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_dismantle_install.auditingflag INTO :flag FROM u_dismantle_install Where u_dismantle_install.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询拆装单操作失败' GOTO ext END IF IF flag = 1 THEN rslt = 0 arg_msg = "单据已经审核,不可以删除" GOTO ext END IF DELETE From u_dismantle_install Where u_dismantle_install.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除拆装单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE From u_dismantle_installmx Where u_dismantle_installmx.billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除拆装单明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF it_newbegin = False it_updatebegin = False IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF arg_ifcommit THEN COMMIT; END IF ext: Return (rslt) end function on uo_dismantle_install.create call super::create TriggerEvent( this, "constructor" ) end on on uo_dismantle_install.destroy TriggerEvent( this, "destructor" ) call super::destroy end on