$PBExportHeader$uo_mtrlware_trans.sru forward global type uo_mtrlware_trans from nonvisualobject end type type s_transmx from structure within uo_mtrlware_trans end type end forward type s_transmx from structure long mtrlid string mtrlcode string plancode string status decimal { 5 } qty decimal { 10 } fprice string mxdscrp long printid long rel_cusid_sptid decimal { 5 } rebate decimal { 10 } price string woodcode string pcode decimal { 5 } addqty end type global type uo_mtrlware_trans from nonvisualobject end type global uo_mtrlware_trans uo_mtrlware_trans type variables public protectedwrite long scid 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=0 public protectedwrite datetime auditingdate public protectedwrite string auditingrep public protectedwrite decimal sum_transqty = 0 long mtrlwareid long storageid long mtrlid long relid string plancode string status datetime billdate string inrep string part string dscrp decimal transqty decimal addqty decimal cost string woodcode string pcode boolean if_getid_ture=true transaction commit_transaction //数据commit事务 private: s_transmx billmx[] //明细结构数组 long it_mxbt=0 //明细结构数组末指针 boolean it_newbegin=false //新建标志 boolean it_updatebegin=false //修改标志 end variables forward prototypes public function integer p_reset () public function integer p_clearmx () public function integer newbegin (long arg_scid, ref string arg_msg) public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer del (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) public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg) public function integer save (boolean arg_ifcommit, ref string arg_msg) public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg) public function integer auditing (boolean arg_ifcommit, ref string arg_msg) public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, long arg_rel_cusid_sptid, ref string arg_msg, string arg_woodcode, string arg_pcode) end prototypes public function integer p_reset ();//int p_reset() //清除对象及其明细 scid = 0 billid = 0 billcode = '' opemp = '' modemp = '' auditingrep = '' flag = 0 inrep = '' part = '' dscrp = '' relid = 0 storageid = 0 mtrlwareid = 0 mtrlid = 0 plancode = '' status = '' transqty = 0 addqty = 0 cost = 0 sum_transqty = 0 it_newbegin = false it_updatebegin = false //清除明细 p_clearmx() return 1 end function public function integer p_clearmx ();//int p_clearmx() //清除明细 it_mxbt=0 sum_transqty=0 return 1 end function public function integer newbegin (long arg_scid, ref string arg_msg);int rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if p_reset() scid=arg_scid it_newbegin=true it_updatebegin=false ext: if rslt=0 then p_reset() return rslt end function public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);int rslt=1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if if arg_billid <= 0 then rslt=0 goto ext end if //if p_getinfo(arg_scid,arg_inwareid,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 p_clearmx() //清除明细 ext: if rslt=0 then p_reset() return rslt end function public function integer p_getinfo (long arg_scid, 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_mtrlware_trans.billcode, u_mtrlware_trans.mtrlwareid, u_mtrlware_trans.storageid, u_mtrlware_trans.mtrlid, u_mtrlware_trans.relid, u_mtrlware_trans.plancode, u_mtrlware_trans.status, u_mtrlware_trans.transqty, u_mtrlware_trans.addqty, u_mtrlware_trans.billdate, u_mtrlware_trans.inrep, u_mtrlware_trans.flag, u_mtrlware_trans.dscrp, u_mtrlware_trans.part, u_mtrlware_trans.cost, u_mtrlware_trans.woodcode, u_mtrlware_trans.pcode INTO :billcode, :mtrlwareid, :storageid, :mtrlid, :relid, :plancode, :status, :transqty, :addqty, :billdate, :inrep, :flag, :dscrp, :part, :cost, :woodcode, :pcode FROM u_mtrlware_trans WHERE u_mtrlware_trans.billid = :arg_billid AND scid = :arg_scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败(错误进仓单唯一码),进仓单"+commit_transaction.SQLErrText GOTO ext END IF billid = arg_billid scid = arg_scid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1 if arg_scid < 0 then arg_msg = '请选择分部' rslt = 0 goto ext end if if arg_billid = 0 then rslt = 0 arg_msg = "没有删除对象,操作取消" goto ext end if rslt = p_getinfo(arg_scid,arg_billid,arg_msg) if rslt = 0 then goto ext if flag = 1 then rslt = 0 arg_msg = "单据已经审核,不可以删除" goto ext end if delete from u_mtrlware_transmx where u_mtrlware_transmx.billid = :arg_billid and scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if delete from u_mtrlware_trans where u_mtrlware_trans.billid = :arg_billid and scid = :arg_scid using commit_transaction; if commit_transaction.sqlcode <> 0 then rslt = 0 arg_msg = "删除单据操作失败"+"~n"+commit_transaction.sqlerrtext goto ext end if it_newbegin = false it_updatebegin = false ext: if rslt=0 then rollback using commit_transaction; elseif rslt=1 and arg_ifcommit then commit using commit_transaction; end if p_reset() return rslt end function public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);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 = p_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_mtrlware_trans SET dscrp = dscrp+' '+:arg_newdescppart WHERE u_mtrlware_trans.billid = :billid And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN ROLLBACK Using commit_transaction; rslt = 0 arg_msg = "添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF COMMIT Using commit_transaction; dscrp = dscrp+' '+arg_newdescppart ext: Return (rslt) end function public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0 sum_transqty = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = "非法单据唯一码" GOTO ext END IF rslt = p_getinfo(arg_scid,arg_billid,arg_msg) IF rslt = 0 THEN GOTO ext //用游标读取明细 DECLARE cur_transmx CURSOR FOR SELECT u_mtrlware_transmx.printid, u_mtrlware_transmx.mtrlid, u_mtrlware_transmx.plancode, u_mtrlware_transmx.status, u_mtrlware_transmx.qty, u_mtrlware_transmx.addqty, u_mtrlware_transmx.fprice, u_mtrlware_transmx.rebate, u_mtrlware_transmx.price, u_mtrlware_transmx.mxdscrp, u_mtrldef.mtrlcode, u_mtrlware_transmx.rel_cusid_sptid, u_mtrlware_transmx.woodcode, u_mtrlware_transmx.pcode FROM u_mtrlware_transmx,u_mtrldef WHERE u_mtrlware_transmx.billid = :arg_billid AND u_mtrlware_transmx.mtrlid = u_mtrldef.mtrlid AND u_mtrlware_transmx.scid = :arg_scid Using commit_transaction; OPEN cur_transmx; FETCH cur_transmx INTO :billmx[i].printid,:billmx[i].mtrlid,:billmx[i].plancode, :billmx[i].status,:billmx[i].qty,:billmx[i].addqty,:billmx[i].fprice, :billmx[i].rebate,:billmx[i].price, :billmx[i].mxdscrp,:billmx[i].mtrlcode, :billmx[i].rel_cusid_sptid, :billmx[i].woodcode, :billmx[i].pcode; DO WHILE commit_transaction.SQLCode = 0 sum_transqty = sum_transqty + billmx[i].qty i++ FETCH cur_transmx INTO :billmx[i].printid,:billmx[i].mtrlid,:billmx[i].plancode, :billmx[i].status,:billmx[i].qty,:billmx[i].addqty,:billmx[i].fprice, :billmx[i].rebate,:billmx[i].price, :billmx[i].mxdscrp,:billmx[i].mtrlcode, :billmx[i].rel_cusid_sptid, :billmx[i].woodcode, :billmx[i].pcode; LOOP CLOSE cur_transmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_mtrlware_transmx WHERE u_mtrlware_transmx.billid = :arg_billid And scid = :arg_scid Using commit_transaction; IF commit_transaction.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 scid = arg_scid it_mxbt = i - 1 it_newbegin = False it_updatebegin = False ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i DateTime server_dt Long ls_newid String ls_sccode Long i_mtrlid Long i_relid String i_plancode String i_status Long i_storageid String i_woodcode String i_pcode IF IsNull(mtrlwareid) THEN mtrlwareid = 0 IF IsNull(storageid) THEN storageid = 0 IF IsNull(cost) THEN cost = 0 IF IsNull(inrep) THEN inrep = '' IF IsNull(part) THEN part = '' IF IsNull(dscrp) THEN dscrp = '' IF IsNull(transqty) THEN transqty = 0 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 USING commit_transaction ; //取得系统时间,借用操作员表 IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确进仓内容" GOTO ext END IF cnt = 0 //检查仓库 SELECT count(*) INTO :cnt FROM u_storage Where u_storage.storageid = :storageid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,仓库" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "错误的仓库编号: "+String(storageid) GOTO ext END IF IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN rslt = 0 arg_msg = "缺少进仓发生时间或不合理" GOTO ext END IF IF transqty <= 0 THEN arg_msg = '请输入正确的转换数量' rslt = 0 GOTO ext END IF IF transqty <> sum_transqty THEN arg_msg = '转换与被转换数量不相等' rslt = 0 GOTO ext END IF //==================================================================== // Script - save ( boolean arg_ifcommit, ref string arg_msg ) // Reason: //-------------------------------------------------------------------- // Modified By: yyx Date: 2004.01.02 //-------------------------------------------------------------------- IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(billdate,'yyyy-mm-dd'))) > 30 THEN rslt = 0 arg_msg = '进仓日期错误,日期不能超前系统日期' GOTO ext END IF IF DaysAfter(Date(String(billdate,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > 30 THEN rslt = 0 arg_msg = '进仓日期错误,日期不能落后系统日期' GOTO ext END IF //==================================================================== SELECT mtrlid,sptid,storageid,plancode,status,woodcode,pcode INTO :i_mtrlid,:i_relid,:i_storageid,:i_plancode,:i_status, :i_woodcode,:i_pcode FROM u_mtrlware WHERE scid = :scid AND mtrlwareid = :mtrlwareid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询相关转换库存失败>>' + commit_transaction.SQLErrText rslt = 0 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 = :mtrlwareid AND u_updatecost.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询成本价调整单操作失败" GOTO ext END IF if cnt>0 then rslt = 0 arg_msg = "已开成本价调整单,请选审核" GOTO ext END IF IF IsNull(i_mtrlid) THEN i_mtrlid = 0 IF IsNull(i_relid) THEN i_relid = 0 IF IsNull(i_storageid) THEN i_storageid = 0 IF IsNull(i_plancode) THEN i_plancode = '' IF IsNull(i_status) THEN i_status = '' IF IsNull(i_woodcode) THEN i_woodcode = '' IF IsNull(i_pcode) THEN i_pcode = '' IF i_storageid <> storageid THEN arg_msg = '仓库与库存不符' rslt = 0 GOTO ext END IF mtrlid = i_mtrlid relid = i_relid storageid = i_storageid plancode = i_plancode status = i_status woodcode = i_woodcode pcode = i_pcode ////////////////////////////////////////////////开始区分:新建/更新 处理 IF billid = 0 THEN //新建 ls_newid = f_sys_scidentity(scid,"u_mtrlware_trans","billid",arg_msg,if_getid_ture,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF billcode = getid(scid,ls_sccode + 'MT',Date(server_dt),if_getid_ture,commit_transaction) IF billcode = "err" THEN billcode = '' rslt = 0 arg_msg = "无法获取单据编号"+"~n"+commit_transaction.SQLErrText GOTO ext END IF INSERT INTO u_mtrlware_trans ( scid, billid, billcode, mtrlwareid, storageid, mtrlid, relid, plancode, status, transqty, addqty, billdate, inrep, part, dscrp, cost, opdate, opemp, woodcode, pcode) VALUES (:scid, :ls_newid, :billcode, :mtrlwareid, :storageid, :mtrlid, :relid, :plancode, :status, :transqty, :addqty, :billdate, :inrep, :part, :dscrp, :cost, :server_dt, :publ_operator, :woodcode, :pcode) USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_trans') > 0 THEN arg_msg = '插入操作失败,关键字单据ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_mtrlware_trans') > 0 THEN arg_msg = '插入操作失败,单据编号重复' ELSE arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF //读取新inwareid billid = ls_newid FOR i = 1 TO it_mxbt INSERT INTO u_mtrlware_transmx (scid, billid, printid, mtrlid, plancode, status, qty, addqty, fprice, rebate, price, mxdscrp, rel_cusid_sptid, woodcode, pcode) VALUES ( :scid, :ls_newid, :billmx[i].printid, :billmx[i].mtrlid, :billmx[i].plancode, :billmx[i].status, :billmx[i].qty, :billmx[i].addqty, :billmx[i].fprice, :billmx[i].rebate, :billmx[i].price, :billmx[i].mxdscrp, :billmx[i].rel_cusid_sptid, :billmx[i].woodcode, :billmx[i].pcode ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN billid = 0 //还原billid rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_transmx') > 0 THEN arg_msg = '插入明细操作失败,关键字单据ID,序号重复' ELSE arg_msg = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT ELSE //////////////////////////////////////////////////更新 UPDATE u_mtrlware_trans SET mtrlwareid = :mtrlwareid, storageid = :storageid, mtrlid = :mtrlid, relid = :relid, plancode = :plancode, status = :status, transqty = :transqty, addqty = :addqty, billdate = :billdate, inrep = :inrep, part = :part, dscrp = :dscrp, cost = :cost, moddate = :server_dt, modemp = :publ_operator, woodcode = :woodcode, pcode = :pcode WHERE u_mtrlware_trans.billid = :billid AND u_mtrlware_trans.scid = :scid AND flag = 0 USING commit_transaction; IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_mtrlware_transmx WHERE u_mtrlware_transmx.billid = :billid AND u_mtrlware_transmx.scid = :scid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_mtrlware_transmx (scid, billid, printid, mtrlid, plancode, status, qty, addqty, fprice, rebate, price, mxdscrp, rel_cusid_sptid, woodcode, pcode) VALUES ( :scid, :billid, :billmx[i].printid, :billmx[i].mtrlid, :billmx[i].plancode, :billmx[i].status, :billmx[i].qty, :billmx[i].addqty, :billmx[i].fprice, :billmx[i].rebate, :billmx[i].price, :billmx[i].mxdscrp, :billmx[i].rel_cusid_sptid, :billmx[i].woodcode, :billmx[i].pcode ) USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_transmx') > 0 THEN arg_msg = '插入明细操作失败,关键字单据ID,序号重复' ELSE arg_msg = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText END IF GOTO ext END IF NEXT END IF it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; p_clearmx() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i DateTime null_dt String ls_mtrlcode Decimal ls_planprice Long ll_inware_in uo_inware uo_in uo_in = Create uo_inware uo_in.commit_transaction = commit_transaction uo_in.if_getid_ture = False uo_in.sysautobuild = True SetNull(null_dt) 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 UPDATE u_mtrlware_trans SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE u_mtrlware_trans.billid = :billid And flag = 1 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF SELECT mtrlcode,planprice INTO :ls_mtrlcode,:ls_planprice FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品资料失败' rslt = 0 GOTO ext END IF //改成撤审删除相关进仓单; 原来只是直接更新库存, 20131021 lhd SELECT count(*) INTO :cnt FROM u_inware WHERE scid = :scid AND relid = :billid AND part = :billcode AND billtype = 8 And sptname = '客存调整单审核自动生成'; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关进仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN SELECT inwareid INTO :ll_inware_in FROM u_inware WHERE scid = :scid AND relid = :billid AND part = :billcode AND billtype = 8 And sptname = '客存调整单审核自动生成'; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询相关进仓单失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_in.getinfo(scid,ll_inware_in,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(scid,ll_inware_in,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE //此段的意义在于兼容旧数据,以后需删掉 //被转换减库存 IF f_inware_update_mtrlware(scid,mtrlid,ls_mtrlcode,& storageid,plancode,status,transqty,addqty,cost,ls_planprice,& relid,0,woodcode,pcode,arg_msg,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF //转换加库存 FOR i = 1 To it_mxbt IF f_inware_update_mtrlware(scid,billmx[i].mtrlid,billmx[i].mtrlcode,& storageid,billmx[i].plancode,billmx[i].status,& 0 - billmx[i].qty,0 - billmx[i].addqty,billmx[i].price,ls_planprice,& billmx[i].rel_cusid_sptid,0,& billmx[i].woodcode,billmx[i].pcode,arg_msg,commit_transaction) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF flag = 0 ext: Destroy uo_in IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i String ls_mtrlcode Decimal ls_planprice Long ll_printid, ll_sptid String ls_unit uo_inware uo_in uo_in = Create uo_inware uo_in.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_mtrlware_trans SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE u_mtrlware_trans.billid = :billid And flag = 0 And scid = :scid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText GOTO ext ELSEIF commit_transaction.SQLNRows = 0 THEN rslt = 0 arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText GOTO ext END IF SELECT mtrlcode,planprice,unit INTO :ls_mtrlcode,:ls_planprice,:ls_unit FROM u_mtrldef Where mtrlid = :mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询产品资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT sptid INTO :ll_sptid FROM u_mtrlware Where mtrlwareid = :mtrlwareid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询库存信息失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //改成生成一张相关进仓单; 原来只是直接更新库存, 20131021 lhd s_inwaremx s_mx IF uo_in.newbegin(scid,8,arg_msg) = 0 THEN // rslt = 0 GOTO ext END IF uo_in.indate = billdate // DateTime(today(),time(0)) // 发生时间 uo_in.inrep = publ_operator // 经手人 uo_in.part = billcode //相关部门 uo_in.dscrp = dscrp //备注 uo_in.storageid = storageid uo_in.sptname = '客存调整单审核自动生成' uo_in.relid = billid uo_in.commit_transaction = commit_transaction uo_in.sysautobuild = True //生成进仓单 减库存 ll_printid = 1 s_mx.printid = ll_printid s_mx.mtrlid = mtrlid s_mx.mtrlcode = ls_mtrlcode s_mx.plancode = plancode s_mx.status = status s_mx.uqty = 0 - transqty s_mx.addqty = 0 - addqty s_mx.uprice = cost s_mx.rebate = 1 s_mx.mxdscrp = "" s_mx.jgprice = 0 s_mx.relid = 0 s_mx.relprintid = 0 s_mx.ifrel = 0 s_mx.woodcode = woodcode s_mx.pcode = pcode s_mx.mtrlcuscode = '' s_mx.sptid = ll_sptid s_mx.unit = ls_unit s_mx.rate = 1 s_mx.formula = "" s_mx.waredscrp = "" s_mx.inworkdate = billdate IF uo_in.acceptmx(s_mx ,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //生成进仓单 增加库存 FOR i = 1 To it_mxbt ll_printid++ s_mx.printid = ll_printid s_mx.mtrlid = billmx[i].mtrlid s_mx.mtrlcode = billmx[i].mtrlcode s_mx.plancode = billmx[i].plancode s_mx.status = billmx[i].status s_mx.uqty = billmx[i].qty s_mx.addqty = billmx[i].addqty s_mx.uprice = billmx[i].price s_mx.rebate = 1 s_mx.mxdscrp = "" s_mx.jgprice = 0 s_mx.relid = 0 s_mx.relprintid = 0 s_mx.ifrel = 0 s_mx.woodcode = billmx[i].woodcode s_mx.pcode = billmx[i].pcode s_mx.mtrlcuscode = '' s_mx.sptid = billmx[i].rel_cusid_sptid s_mx.unit = ls_unit s_mx.rate = 1 s_mx.formula = "" s_mx.waredscrp = "" s_mx.inworkdate = billdate IF uo_in.acceptmx(s_mx ,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_in.it_mxbt > 0 THEN IF uo_in.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_in.getinfo(scid,uo_in.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 END IF // //被转换减库存 //IF f_inware_update_mtrlware(scid,mtrlid,ls_mtrlcode,& // storageid,plancode,status,0 - transqty,0 - addqty,cost,ls_planprice,& // relid,0,woodcode,pcode,arg_msg,commit_transaction) = 0 THEN // rslt = 0 // GOTO ext //END IF // ////转换加库存 //FOR i = 1 To it_mxbt // IF f_inware_update_mtrlware(scid,billmx[i].mtrlid,billmx[i].mtrlcode,& // storageid,billmx[i].plancode,billmx[i].status,& // billmx[i].qty,billmx[i].addqty,billmx[i].price,ls_planprice,& // billmx[i].rel_cusid_sptid,0,& // billmx[i].woodcode,billmx[i].pcode,arg_msg,commit_transaction) = 0 THEN // rslt = 0 // GOTO ext // END IF //NEXT flag = 1 ext: Destroy uo_in IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, long arg_rel_cusid_sptid, ref string arg_msg, string arg_woodcode, string arg_pcode);Long rslt = 1,cnt = 0 String i_mtrlcode 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_mtrlid) THEN arg_mtrlid = 0 IF IsNull(arg_plancode) THEN arg_plancode = '' IF IsNull(arg_status) THEN arg_status = '' IF IsNull(arg_qty) THEN arg_qty = 0 IF IsNull(arg_addqty) THEN arg_addqty = 0 IF IsNull(arg_fprice) THEN arg_fprice = 0 IF IsNull(arg_rebate) THEN arg_rebate = 0 IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = '' IF IsNull(arg_woodcode) THEN arg_woodcode = '' IF IsNull(arg_pcode) THEN arg_pcode = '' IF IsNull(arg_rel_cusid_sptid) THEN arg_rel_cusid_sptid = 0 // 如果进仓数量为 0,或物料编号为空,则不作任何处理 IF arg_mtrlid = 0 OR arg_qty = 0 THEN rslt = 1 GOTO ext END IF //检查物料id SELECT mtrlcode INTO :i_mtrlcode FROM u_mtrldef Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,物料或产品资料" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_rel_cusid_sptid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询客户资料失败' rslt = 0 GOTO ext END IF IF arg_fprice * arg_rebate < 0 THEN //检查进仓价 rslt = 0 arg_msg = "物料或产品:" + String(i_mtrlcode)+" 单价错误" GOTO ext END IF ///////////////////// //检查成本价调整单 Long ll_mtrlwareid SELECT mtrlwareid INTO :ll_mtrlwareid FROM u_mtrlware WHERE ( mtrlid = :arg_mtrlid ) AND ( plancode = :arg_plancode ) AND ( storageid = :storageid ) AND ( scid = :scid ) AND ( status = :arg_status ) AND ( sptid = :arg_rel_cusid_sptid) AND ( dxflag = 0) AND ( woodcode = :arg_woodcode) AND ( pcode = :arg_pcode) USING commit_transaction; IF commit_transaction.SQLCode = -1 THEN arg_msg = "第" + String(arg_printid) + "行,查询库存信息失败!" rslt = 0 GOTO ext ELSEIF ll_mtrlwareid > 0 THEN 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 = :mtrlwareid AND u_updatecost.scid = :scid USING commit_transaction; IF commit_transaction.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 END IF //写入内容 it_mxbt++ billmx[it_mxbt].printid = arg_printid billmx[it_mxbt].mtrlid = arg_mtrlid billmx[it_mxbt].mtrlcode = i_mtrlcode billmx[it_mxbt].plancode = arg_plancode billmx[it_mxbt].status = arg_status billmx[it_mxbt].qty = arg_qty billmx[it_mxbt].addqty = arg_addqty billmx[it_mxbt].fprice = arg_fprice billmx[it_mxbt].rebate = arg_rebate billmx[it_mxbt].price = arg_fprice * arg_rebate billmx[it_mxbt].mxdscrp = arg_mxdscrp billmx[it_mxbt].rel_cusid_sptid = arg_rel_cusid_sptid billmx[it_mxbt].woodcode = arg_woodcode billmx[it_mxbt].pcode = arg_pcode sum_transqty = sum_transqty + arg_qty ext: IF rslt = 0 THEN p_clearmx() arg_msg = "第" + String(arg_printid) + "行," + arg_msg END IF Return(rslt) end function on uo_mtrlware_trans.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mtrlware_trans.destroy TriggerEvent( this, "destructor" ) call super::destroy end on