$PBExportHeader$uo_outware_scllplan.sru forward global type uo_outware_scllplan from nonvisualobject end type end forward global type uo_outware_scllplan from nonvisualobject end type global uo_outware_scllplan uo_outware_scllplan type variables Long uo_outwareid String uo_outwarecode long it_mxbt,it_mxbt_mx,it_mxbt_plan,it_mxbt_cut,it_mxbt_rect int uo_option_scllplan_outware_auto int uo_option_scllplan_noscllmx s_aps_orderrqmtrl ins_s_rqmtrl,ins_s_empty long ins_itmx_aps end variables forward prototypes public function integer save (s_outware_scllplan arg_s_scll, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer p_getflag (long arg_outwareid, ref long arg_flag, ref string arg_msg) public function integer updatebegin (long arg_outwareid, ref string arg_msg) public function integer del (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_outwareid, string arg_newdescppart, ref string arg_msg) public function integer p_replace_mx (long arg_outwareid, ref s_outware_scllplan_mx arg_s_mx[], ref long arg_itmx, ref string arg_msg) public function integer getinfo (long arg_outwareid, ref s_outware_scllplan_mx arg_ref_costmx[], ref s_outware_scllplan_mx_mx arg_ref_mx_mx[], ref long arg_arr_cnt, ref long arg_arr_cnt_mx, ref string arg_msg) public function integer p_addfactscllqty_mx (integer arg_type, long arg_outwareid, long arg_storageid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg) public function integer uof_update_mtrlflag (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit, ref long arg_relid[]) public function integer caudit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit, ref long arg_relid[]) protected function integer uof_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg) public function integer uof_stopqty (long arg_outwareid, long arg_printid, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit) public function integer p_addfactscllqty (long arg_outwareid, long arg_mtrlwareid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_uqty, ref decimal arg_overqty, decimal arg_costamt, decimal arg_addflqty, integer arg_auditflag, boolean arg_ifcommit, ref string arg_msg) end prototypes public function integer save (s_outware_scllplan arg_s_scll, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid String ls_sccode,ls_billcode Long ll_i, i,ll_k Int li_ifkl,li_scllplan_mode Decimal ld_noallocqty If uo_option_scllplan_noscllmx = -1000 Then arg_msg = '选项:[405]发料通知单不使用领料明细,读取初始默认值失败,操作取消!' rslt = 0 Goto ext End If If IsNull(arg_s_scll.scid) Then arg_s_scll.scid = 0 If IsNull(arg_s_scll.outwareid) Then arg_s_scll.outwareid = 0 If IsNull(arg_s_scll.outrep) Then arg_s_scll.outrep = '' If IsNull(arg_s_scll.relcode) Then arg_s_scll.relcode = '' If IsNull(arg_s_scll.dscrp) Then arg_s_scll.dscrp = '' If IsNull(arg_s_scll.wrkgrpid) Then arg_s_scll.wrkgrpid = 0 If IsNull(arg_s_scll.wkpid) Then arg_s_scll.wkpid = 0 If IsNull(arg_s_scll.relid) Then arg_s_scll.relid = 0 If IsNull(arg_s_scll.not_scll) Then arg_s_scll.not_scll = 0 If IsNull(arg_s_scll.billtype) Then arg_s_scll.billtype = 0 If arg_s_scll.outrep = '' Then arg_msg = '请输入经手人' rslt = 0 Goto ext End If If arg_s_scll.wrkgrpid = 0 Then arg_msg = '请选择车间' rslt = 0 Goto ext End If If arg_s_scll.relid = 0 Then arg_msg = '请选择领料组' rslt = 0 Goto ext End If Select Top 1 getdate() Into :server_dt From u_user; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "查询操作失败,日期 " Goto ext End If //it_mxbt = UpperBound(arg_s_scll.arg_s_mx) If it_mxbt <= 0 Then rslt = 0 arg_msg = "没有正确明细内容" Goto ext End If //it_mxbt_mx = UpperBound(arg_s_scll.arg_s_mx_mx) If it_mxbt_mx <= 0 And uo_option_scllplan_noscllmx = 0 Then rslt = 0 arg_msg = "没有正确汇总内容" Goto ext End If it_mxbt_plan = UpperBound(arg_s_scll.arg_s_plan) it_mxbt_cut = UpperBound(arg_s_scll.arg_s_cut) it_mxbt_rect = UpperBound(arg_s_scll.arg_s_rect) Long ll_cnt Decimal ld_noflqty,ld_otherflqty,lde_mx_qty For ll_i = 1 To it_mxbt If arg_s_scll.arg_s_mx[ll_i].qty < 0 Then rslt = 0 arg_msg = '不合理的数量,第'+String(ll_i)+'行' Goto ext End If If arg_s_scll.arg_s_mx[ll_i].mtrlid = 0 Then rslt = 0 arg_msg = '错误的物料ID,第'+String(ll_i)+'行' Goto ext End If If arg_s_scll.arg_s_mx[ll_i].orderid = 0 Then rslt = 0 arg_msg = '错误的指令单ID,第'+String(ll_i)+'行' Goto ext End If Select count(*) Into :ll_cnt From u_OrderRqMtrl_scll Where orderid = :arg_s_scll.arg_s_mx[ll_i].orderid And mtrlid = :arg_s_scll.arg_s_mx[ll_i].mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询操作失败,指令单用料明细,第'+String(ll_i)+'行' Goto ext End If If ll_cnt = 0 Then rslt = 0 arg_msg = '指令单中没有该用料,第'+String(ll_i)+'行' Goto ext End If Select scllplan_mode Into :li_scllplan_mode From u_mtrldef Where mtrlid = :arg_s_scll.arg_s_mx[ll_i].mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询物料发料通知单属性失败,第'+String(ll_i)+'行' Goto ext End If //检查是否超领料明细数量 //1.未发料数 If li_scllplan_mode = 0 Then ld_noflqty = 0 Select truerqqty - flqty Into :ld_noflqty From u_OrderRqMtrl_scll Where scid = :arg_s_scll.scid And orderid = :arg_s_scll.arg_s_mx[ll_i].orderid And mtrlid = :arg_s_scll.arg_s_mx[ll_i].mtrlid And status = :arg_s_scll.arg_s_mx[ll_i].status And woodcode = :arg_s_scll.arg_s_mx[ll_i].woodcode And pcode = :arg_s_scll.arg_s_mx[ll_i].pcode And wrkgrpid = :arg_s_scll.wkpid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询指令单用料明细未发料数失败,第'+String(ll_i)+'行' Goto ext End If //2.其他单据已开未审数 ld_otherflqty = 0 Select SUM(u_outware_scllplan_mx.qty) Into :ld_otherflqty From u_outware_scllplan Inner JOIN u_outware_scllplan_mx ON u_outware_scllplan.outwareid = u_outware_scllplan_mx.outwareid Inner JOIN u_workgroup ON u_outware_scllplan.relid = u_workgroup.workgroupid Where (u_outware_scllplan.flag = 0) And u_outware_scllplan.scid = :arg_s_scll.scid And u_outware_scllplan_mx.orderid = :arg_s_scll.arg_s_mx[ll_i].orderid And u_outware_scllplan_mx.mtrlid = :arg_s_scll.arg_s_mx[ll_i].mtrlid And u_outware_scllplan_mx.status = :arg_s_scll.arg_s_mx[ll_i].status And u_outware_scllplan_mx.woodcode = :arg_s_scll.arg_s_mx[ll_i].woodcode And u_outware_scllplan_mx.pcode = :arg_s_scll.arg_s_mx[ll_i].pcode And u_workgroup.wrkGrpid = :arg_s_scll.wkpid And u_outware_scllplan.outwareid <> :arg_s_scll.outwareid; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '查询用料明细其他单据已开未审数量失败,第'+String(ll_i)+'行' Goto ext End If //3.本单数量 lde_mx_qty = 0 For ll_k = 1 To it_mxbt If arg_s_scll.arg_s_mx[ll_i].orderid = arg_s_scll.arg_s_mx[ll_k].orderid And & arg_s_scll.arg_s_mx[ll_i].mtrlid = arg_s_scll.arg_s_mx[ll_k].mtrlid And & arg_s_scll.arg_s_mx[ll_i].status = arg_s_scll.arg_s_mx[ll_k].status And & arg_s_scll.arg_s_mx[ll_i].woodcode = arg_s_scll.arg_s_mx[ll_k].woodcode And & arg_s_scll.arg_s_mx[ll_i].pcode = arg_s_scll.arg_s_mx[ll_k].pcode Then lde_mx_qty = lde_mx_qty + arg_s_scll.arg_s_mx[ll_k].qty End If Next If IsNull(ld_noflqty) Then ld_noflqty = 0 If IsNull(ld_otherflqty) Then ld_otherflqty = 0 If IsNull(lde_mx_qty) Then lde_mx_qty = 0 If ld_otherflqty + lde_mx_qty > ld_noflqty Then rslt = 0 arg_msg = '需求明细,第'+String(ll_i)+'行,未开发料通知单数:'+String(ld_noflqty,'#,##0.##########')+',其他单据开单数:'+String(ld_otherflqty,'#,##0.##########')+',本单不能再开:'+String(lde_mx_qty,'#,##0.##########') Goto ext End If End If Next For ll_i = 1 To it_mxbt_mx If arg_s_scll.arg_s_mx_mx[ll_i].qty < 0 Then rslt = 0 arg_msg = '不合理的数量,第'+String(ll_i)+'行,汇总明细,'+String(arg_s_scll.arg_s_mx_mx[ll_i].qty) Goto ext End If If arg_s_scll.arg_s_mx_mx[ll_i].storageid = 0 Then rslt = 0 arg_msg = '请先选择仓库,第'+String(ll_i)+'行,汇总明细' Goto ext End If Next For ll_i = 1 To it_mxbt_mx Select ifkl,scllplan_mode Into :li_ifkl,:li_scllplan_mode From u_mtrldef Where mtrlid = :arg_s_scll.arg_s_mx_mx[ll_i].mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第 '+String(ll_i)+' 行,查询物料裁板属性失败,物料:['+arg_s_scll.arg_s_mx_mx[ll_i].mtrlcode+'],'+arg_s_scll.arg_s_mx_mx[ll_i].mtrlname Goto ext End If If li_scllplan_mode = 0 Then Select top 1 noallocqty Into :ld_noallocqty From u_mtrlware Where mtrlid = :arg_s_scll.arg_s_mx_mx[ll_i].mtrlid And storageid = :arg_s_scll.arg_s_mx_mx[ll_i].storageid And plancode = :arg_s_scll.arg_s_mx_mx[ll_i].plancode And status = :arg_s_scll.arg_s_mx_mx[ll_i].status And woodcode = :arg_s_scll.arg_s_mx_mx[ll_i].woodcode And pcode = :arg_s_scll.arg_s_mx_mx[ll_i].pcode Order By noallocqty Desc; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '第 '+String(ll_i)+' 行,查询物料库存失败,物料:['+arg_s_scll.arg_s_mx_mx[ll_i].mtrlcode+'],'+arg_s_scll.arg_s_mx_mx[ll_i].mtrlname+',仓库:'+String(arg_s_scll.arg_s_mx_mx[ll_i].storageid) Goto ext End If If ld_noallocqty < arg_s_scll.arg_s_mx_mx[ll_i].qty Then rslt = 0 arg_msg = '第 '+String(ll_i)+' 行,库存数量不足,物料:['+arg_s_scll.arg_s_mx_mx[ll_i].mtrlcode+'],'+arg_s_scll.arg_s_mx_mx[ll_i].mtrlname+',仓库:'+arg_s_scll.arg_s_mx_mx[ll_i].storagename+',领料数:'+String(arg_s_scll.arg_s_mx_mx[ll_i].qty,'#,##0.0#########')+',库存数:'+String(ld_noallocqty,'#,##0.0#########') Goto ext End If End If If li_ifkl = 0 Then arg_s_scll.arg_s_mx_mx[ll_i].adviceqty = arg_s_scll.arg_s_mx_mx[ll_i].qty End If Next If arg_s_scll.outwareid = 0 Then ll_billid = f_sys_scidentity(0,"u_outware_scllplan","outwareid",arg_msg,False,sqlca) If ll_billid <= 0 Then rslt = 0 Goto ext End If If f_get_sccode(arg_s_scll.scid,sqlca,ls_sccode,arg_msg) = 0 Then rslt = 0 Goto ext End If ls_billcode = getid(arg_s_scll.scid,ls_sccode + 'CL',Date(server_dt),False,sqlca) If ls_billcode = "err" Then rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText Goto ext End If Insert Into u_outware_scllplan (scid, outwareid, outwarecode, outdate, outrep, relcode, wrkgrpid, dscrp, opdate, opemp, relid, wkpid, not_scll, billtype) Values (:arg_s_scll.scid, :ll_billid, :ls_billcode, :arg_s_scll.outdate, :arg_s_scll.outrep, :arg_s_scll.relcode, :arg_s_scll.wrkgrpid, :arg_s_scll.dscrp, getdate(), :arg_opemp, :arg_s_scll.relid, :arg_s_scll.wkpid, :arg_s_scll.not_scll, :arg_s_scll.billtype); 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_outware_scllplan_mx (outwareid, printid, orderid, mtrlid, qty, dscrp, iflock, planscllqty, iflost, lockqty, factscllqty, status, woodcode, pcode, trueRqqty, p_rqqty) Values (:ll_billid, :arg_s_scll.arg_s_mx[i].printid, :arg_s_scll.arg_s_mx[i].orderid, :arg_s_scll.arg_s_mx[i].mtrlid, :arg_s_scll.arg_s_mx[i].qty, :arg_s_scll.arg_s_mx[i].dscrp, :arg_s_scll.arg_s_mx[i].iflock, :arg_s_scll.arg_s_mx[i].planscllqty, :arg_s_scll.arg_s_mx[i].iflost, :arg_s_scll.arg_s_mx[i].lockqty, 0, :arg_s_scll.arg_s_mx[i].status, :arg_s_scll.arg_s_mx[i].woodcode, :arg_s_scll.arg_s_mx[i].pcode, :arg_s_scll.arg_s_mx[i].trueRqqty, :arg_s_scll.arg_s_mx[i].p_rqqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next For i = 1 To it_mxbt_mx Insert Into u_outware_scllplan_mx_mx (outwareid, printid, mtrlid, storageid, qty, cmplqty, plancode, factscllqty, noallocqty, lockqty, mxdscrp, status, woodcode, pcode, mtrlwareid, uqty, adviceqty, p_rqqty, rate, unit) Values (:ll_billid, :arg_s_scll.arg_s_mx_mx[i].printid, :arg_s_scll.arg_s_mx_mx[i].mtrlid, :arg_s_scll.arg_s_mx_mx[i].storageid, :arg_s_scll.arg_s_mx_mx[i].qty, :arg_s_scll.arg_s_mx_mx[i].cmplqty, :arg_s_scll.arg_s_mx_mx[i].plancode, 0, :arg_s_scll.arg_s_mx_mx[i].noallocqty, :arg_s_scll.arg_s_mx_mx[i].lockqty, :arg_s_scll.arg_s_mx_mx[i].mxdscrp, :arg_s_scll.arg_s_mx_mx[i].status, :arg_s_scll.arg_s_mx_mx[i].woodcode, :arg_s_scll.arg_s_mx_mx[i].pcode, :arg_s_scll.arg_s_mx_mx[i].mtrlwareid, :arg_s_scll.arg_s_mx_mx[i].uqty, :arg_s_scll.arg_s_mx_mx[i].adviceqty, :arg_s_scll.arg_s_mx_mx[i].p_rqqty, :arg_s_scll.arg_s_mx_mx[i].rate, :arg_s_scll.arg_s_mx_mx[i].u_unit); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next For i = 1 To it_mxbt_plan Insert Into u_kl_plan (planid, billid, opemp, opdate, mtrlid, printnum) Values (:arg_s_scll.arg_s_plan[i].planid, :ll_billid, :arg_opemp, :server_dt, :arg_s_scll.arg_s_plan[i].mtrlid, 0); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next For i = 1 To it_mxbt_cut Insert Into u_kl_cut (planid, printid, mtrlwareid, width, height, qty) Values (:arg_s_scll.arg_s_cut[i].planid, :arg_s_scll.arg_s_cut[i].printid, :arg_s_scll.arg_s_cut[i].mtrlwareid, :arg_s_scll.arg_s_cut[i].width, :arg_s_scll.arg_s_cut[i].height, :arg_s_scll.arg_s_cut[i].qty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料裁法明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next For i = 1 To it_mxbt_rect Insert Into u_kl_rect (planid, printid, pid, width, height, parentid, sonflag, if_vertical) Values (:arg_s_scll.arg_s_rect[i].planid, :arg_s_scll.arg_s_rect[i].printid, :arg_s_scll.arg_s_rect[i].pid, :arg_s_scll.arg_s_rect[i].width, :arg_s_scll.arg_s_rect[i].height, :arg_s_scll.arg_s_rect[i].parentid, :arg_s_scll.arg_s_rect[i].sonflag, :arg_s_scll.arg_s_rect[i].if_vertical); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料裁法中间部件明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next uo_outwareid = ll_billid uo_outwarecode = ls_billcode Else Update u_outware_scllplan Set outdate = :arg_s_scll.outdate, outrep = :arg_s_scll.outrep, relcode = :arg_s_scll.relcode, wrkgrpid = :arg_s_scll.wrkgrpid, dscrp = :arg_s_scll.dscrp, moddate = getdate(), modemp = :arg_opemp, relid = :arg_s_scll.relid, wkpid = :arg_s_scll.wkpid, not_scll = :arg_s_scll.not_scll, billtype = :arg_s_scll.billtype Where outwareid = :arg_s_scll.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_outware_scllplan_mx Where outwareid = :arg_s_scll.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_outware_scllplan_mx (outwareid, printid, orderid, mtrlid, qty, dscrp, iflock, planscllqty, iflost, lockqty, factscllqty, status, woodcode, pcode, trueRqqty, p_rqqty) Values (:arg_s_scll.outwareid, :arg_s_scll.arg_s_mx[i].printid, :arg_s_scll.arg_s_mx[i].orderid, :arg_s_scll.arg_s_mx[i].mtrlid, :arg_s_scll.arg_s_mx[i].qty, :arg_s_scll.arg_s_mx[i].dscrp, :arg_s_scll.arg_s_mx[i].iflock, :arg_s_scll.arg_s_mx[i].planscllqty, :arg_s_scll.arg_s_mx[i].iflost, :arg_s_scll.arg_s_mx[i].lockqty, 0, :arg_s_scll.arg_s_mx[i].status, :arg_s_scll.arg_s_mx[i].woodcode, :arg_s_scll.arg_s_mx[i].pcode, :arg_s_scll.arg_s_mx[i].trueRqqty, :arg_s_scll.arg_s_mx[i].p_rqqty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next Delete From u_outware_scllplan_mx_mx Where outwareid = :arg_s_scll.outwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If For i = 1 To it_mxbt_mx Insert Into u_outware_scllplan_mx_mx (outwareid, printid, mtrlid, storageid, qty, cmplqty, factscllqty, noallocqty, lockqty, mxdscrp, status, woodcode, pcode, mtrlwareid, uqty, adviceqty, p_rqqty, rate, unit, plancode) Values (:arg_s_scll.outwareid, :arg_s_scll.arg_s_mx_mx[i].printid, :arg_s_scll.arg_s_mx_mx[i].mtrlid, :arg_s_scll.arg_s_mx_mx[i].storageid, :arg_s_scll.arg_s_mx_mx[i].qty, :arg_s_scll.arg_s_mx_mx[i].cmplqty, 0, :arg_s_scll.arg_s_mx_mx[i].noallocqty, :arg_s_scll.arg_s_mx_mx[i].lockqty, :arg_s_scll.arg_s_mx_mx[i].mxdscrp, :arg_s_scll.arg_s_mx_mx[i].status, :arg_s_scll.arg_s_mx_mx[i].woodcode, :arg_s_scll.arg_s_mx_mx[i].pcode, :arg_s_scll.arg_s_mx_mx[i].mtrlwareid, :arg_s_scll.arg_s_mx_mx[i].uqty, :arg_s_scll.arg_s_mx_mx[i].adviceqty, :arg_s_scll.arg_s_mx_mx[i].p_rqqty, :arg_s_scll.arg_s_mx_mx[i].rate, :arg_s_scll.arg_s_mx_mx[i].u_unit, :arg_s_scll.arg_s_mx_mx[i].plancode); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next If it_mxbt_cut > 0 Then Delete u_kl_cut From u_kl_cut Inner JOIN u_kl_plan ON u_kl_cut.planid = u_kl_plan.planid Where u_kl_plan.billid = :arg_s_scll.outwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细裁料裁法操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If For i = 1 To it_mxbt_cut Insert Into u_kl_cut (planid, printid, mtrlwareid, width, height, qty) Values (:arg_s_scll.arg_s_cut[i].planid, :arg_s_scll.arg_s_cut[i].printid, :arg_s_scll.arg_s_cut[i].mtrlwareid, :arg_s_scll.arg_s_cut[i].width, :arg_s_scll.arg_s_cut[i].height, :arg_s_scll.arg_s_cut[i].qty); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料裁法明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next If it_mxbt_rect > 0 Then Delete u_kl_rect From u_kl_rect Inner JOIN u_kl_plan ON u_kl_rect.planid = u_kl_plan.planid Where u_kl_plan.billid = :arg_s_scll.outwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细裁料裁法中间部件操作失败"+"~n"+sqlca.SQLErrText Goto ext End If End If For i = 1 To it_mxbt_rect Insert Into u_kl_rect (planid, printid, pid, width, height, parentid, sonflag, if_vertical) Values (:arg_s_scll.arg_s_rect[i].planid, :arg_s_scll.arg_s_rect[i].printid, :arg_s_scll.arg_s_rect[i].pid, :arg_s_scll.arg_s_rect[i].width, :arg_s_scll.arg_s_rect[i].height, :arg_s_scll.arg_s_rect[i].parentid, :arg_s_scll.arg_s_rect[i].sonflag, :arg_s_scll.arg_s_rect[i].if_vertical); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料裁法中间部件明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next Delete From u_kl_plan Where billid = :arg_s_scll.outwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "删除旧有明细裁料操作失败"+"~n"+sqlca.SQLErrText Goto ext End If For i = 1 To it_mxbt_plan Insert Into u_kl_plan (planid, billid, opemp, opdate, mtrlid, printnum) Values (:arg_s_scll.arg_s_plan[i].planid, :arg_s_scll.outwareid, :arg_opemp, :server_dt, :arg_s_scll.arg_s_plan[i].mtrlid, :arg_s_scll.arg_s_plan[i].printnum); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致插入裁料明细操作失败"+"~n"+sqlca.SQLErrText Goto ext End If Next uo_outwareid = arg_s_scll.outwareid End If For ll_i = 1 To it_mxbt If uof_update_mtrlflag(arg_s_scll.scid,arg_s_scll.arg_s_mx[ll_i].orderid,arg_s_scll.wkpid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Next //更新单据摘要内容的指令单生产批号串 String ls_taskrelcode,ls_taskrelcode_str Declare cur_taskrelcode Cursor For Select DISTINCT u_Order_ml.taskrelcode From u_Order_ml Inner JOIN u_outware_scllplan_mx ON u_Order_ml.OrderID = u_outware_scllplan_mx.orderid Inner JOIN u_outware_scllplan ON u_outware_scllplan_mx.outwareid = u_outware_scllplan.outwareid And u_Order_ml.scid = u_outware_scllplan.scid Where (u_Order_ml.taskrelcode <> '') And ( u_outware_scllplan_mx.outwareid = :uo_outwareid ); Open cur_taskrelcode ; Fetch cur_taskrelcode Into :ls_taskrelcode; Do While sqlca.SQLCode = 0 ls_taskrelcode_str = ls_taskrelcode_str + ls_taskrelcode + ',' Fetch cur_taskrelcode Into :ls_taskrelcode; Loop Close cur_taskrelcode; Update u_outware_scllplan Set taskrelcode = left(:ls_taskrelcode_str,500) Where outwareid = :uo_outwareid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "因网络或其它原因导致更新单据生产批号串操作失败"+"~n"+sqlca.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback; ElseIf arg_ifcommit And rslt = 1 Then Commit; End If Return rslt end function public function integer p_getflag (long arg_outwareid, ref long arg_flag, ref string arg_msg);Int rslt = 1 SELECT flag INTO :arg_flag FROM u_outware_scllplan WHERE outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: RETURN rslt end function public function integer updatebegin (long arg_outwareid, ref string arg_msg);Int rslt = 1 long li_flag IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_outwareid,li_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF li_flag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer del (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_flag IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不能删除' GOTO ext END IF Long ll_scid ,ll_wkpid SELECT scid, wkpid INTO :ll_scid,:ll_wkpid FROM u_outware_scllplan Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败' GOTO ext END IF DELETE FROM u_outware_scllplan_mx Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_outware_scllplan_mx_mx Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据汇总明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE u_kl_cut FROM u_kl_cut INNER JOIN u_kl_plan ON u_kl_cut.planid = u_kl_plan.planid Where u_kl_plan.billid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细裁料裁法操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE u_kl_rect FROM u_kl_rect INNER JOIN u_kl_plan ON u_kl_rect.planid = u_kl_plan.planid Where u_kl_plan.billid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细裁料裁法中间部件操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_kl_plan Where billid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细裁料操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_outware_scllplan WHERE outwareid = :arg_outwareid And flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF s_outware_scllplan_mx s_scll_mx[] s_outware_scllplan_mx_mx s_scll_mx_mx[] Long ll_mx_cnt,ll_mx_mx_cnt IF getinfo(arg_outwareid,s_scll_mx,s_scll_mx_mx,ll_mx_cnt,ll_mx_mx_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF Long ll_i String ls_outwarecode FOR ll_i = 1 To ll_mx_cnt IF uof_update_mtrlflag(ll_scid,s_scll_mx[ll_i].orderid,ll_wkpid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_outwareid, string arg_newdescppart, ref string arg_msg); Int rslt = 1 long ll_flag IF arg_newdescppart = '' THEN rslt = 0 arG_MSG = "要添加内容为空,操作取消" GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag = 0 THEN rslt = 0 arG_MSG = "待审核状态下不可用" GOTO ext END IF UPDATE u_outware_scllplan SET DSCRP = DSCRP+' '+:arg_newdescppart WHERE u_outware_scllplan.outwareid = :arg_outwareid; IF SQLCA.SQLCode <> 0 THEN rslt = 0 arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF Return (rslt) end function public function integer p_replace_mx (long arg_outwareid, ref s_outware_scllplan_mx arg_s_mx[], ref long arg_itmx, ref string arg_msg);Int rslt = 1 Long ll_i,ll_j Long it_mxbt_1 IF arg_outwareid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF // s_outware_scllplan_mx arg_ref_costmx[] s_outware_scllplan_mx_mx arg_ref_mx_mx[] Long ll_mx_cnt,ll_mx_mx_cnt IF getinfo(arg_outwareid,arg_ref_costmx,arg_ref_mx_mx,ll_mx_cnt,ll_mx_mx_cnt,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 TO ll_mx_cnt FOR ll_j = 1 TO it_mxbt_1 IF arg_s_mx[ll_j].mtrlid = arg_ref_costmx[ll_i].mtrlid AND & arg_s_mx[ll_j].status = arg_ref_costmx[ll_i].status AND & arg_s_mx[ll_j].woodcode = arg_ref_costmx[ll_i].woodcode AND & arg_s_mx[ll_j].pcode = arg_ref_costmx[ll_i].pcode AND & arg_s_mx[ll_j].storageid = arg_ref_costmx[ll_i].storageid THEN //----------- arg_s_mx[ll_j].qty = arg_s_mx[ll_j].qty + arg_ref_costmx[ll_i].qty GOTO next_mtrlid // continue END IF NEXT it_mxbt_1++ arg_s_mx[it_mxbt_1].mtrlid = arg_ref_costmx[ll_i].mtrlid arg_s_mx[it_mxbt_1].storageid = arg_ref_costmx[ll_i].storageid arg_s_mx[it_mxbt_1].qty = arg_ref_costmx[ll_i].qty arg_s_mx[it_mxbt_1].dscrp = arg_ref_costmx[ll_i].dscrp arg_s_mx[it_mxbt_1].mtrlcode = arg_ref_costmx[ll_i].mtrlcode arg_s_mx[it_mxbt_1].mtrlname = arg_ref_costmx[ll_i].mtrlname arg_s_mx[it_mxbt_1].mtrlmode = arg_ref_costmx[ll_i].mtrlmode arg_s_mx[it_mxbt_1].storagename = arg_ref_costmx[ll_i].storagename arg_s_mx[it_mxbt_1].unit = arg_ref_costmx[ll_i].unit arg_s_mx[it_mxbt_1].status = arg_ref_costmx[ll_i].status arg_s_mx[it_mxbt_1].woodcode = arg_ref_costmx[ll_i].woodcode arg_s_mx[it_mxbt_1].pcode = arg_ref_costmx[ll_i].pcode next_mtrlid: NEXT arg_itmx = it_mxbt_1 ext: RETURN rslt end function public function integer getinfo (long arg_outwareid, ref s_outware_scllplan_mx arg_ref_costmx[], ref s_outware_scllplan_mx_mx arg_ref_mx_mx[], ref long arg_arr_cnt, ref long arg_arr_cnt_mx, ref string arg_msg);Int rslt = 1 Long i = 1,j = 1 ,no_mxcheck = 0 IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_scllmx CURSOR FOR SELECT u_outware_scllplan_mx.outwareid, u_outware_scllplan_mx.printid, u_outware_scllplan_mx.orderid, u_outware_scllplan_mx.mtrlid, u_outware_scllplan_mx.status, u_outware_scllplan_mx.woodcode, u_outware_scllplan_mx.pcode, u_outware_scllplan_mx.storageid, u_outware_scllplan_mx.qty, u_outware_scllplan_mx.dscrp, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_mtrldef.unit, u_order_ml.mtrlid, 0 as costamt, u_outware_scllplan_mx.trueRqqty, u_mtrldef.scllplan_mode, u_outware_scllplan_mx.p_rqqty, u_outware_scllplan_mx.planscllqty FROM u_outware_scllplan_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx.mtrlid = u_mtrldef.mtrlid LEFT OUTER JOIN u_Order_ml ON u_outware_scllplan_mx.orderid = u_Order_ml.OrderID WHERE u_outware_scllplan_mx.outwareid = :arg_outwareid Order By u_outware_scllplan_mx.printid Asc; OPEN cur_scllmx; FETCH cur_scllmx INTO :arg_ref_costmx[i].outwareid, :arg_ref_costmx[i].printid,:arg_ref_costmx[i].orderid, :arg_ref_costmx[i].mtrlid, :arg_ref_costmx[i].status, :arg_ref_costmx[i].woodcode, :arg_ref_costmx[i].pcode,:arg_ref_costmx[i].storageid, :arg_ref_costmx[i].qty,:arg_ref_costmx[i].dscrp, :arg_ref_costmx[i].mtrlcode,:arg_ref_costmx[i].mtrlname, :arg_ref_costmx[i].mtrlmode, :arg_ref_costmx[i].unit,:arg_ref_costmx[i].order_mtrlid, :arg_ref_costmx[i].costamt, :arg_ref_costmx[i].trueRqqty, :arg_ref_costmx[i].scllplan_mode, :arg_ref_costmx[i].p_rqqty, :arg_ref_costmx[i].planscllqty; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_scllmx INTO :arg_ref_costmx[i].outwareid, :arg_ref_costmx[i].printid,:arg_ref_costmx[i].orderid, :arg_ref_costmx[i].mtrlid, :arg_ref_costmx[i].status, :arg_ref_costmx[i].woodcode, :arg_ref_costmx[i].pcode,:arg_ref_costmx[i].storageid, :arg_ref_costmx[i].qty,:arg_ref_costmx[i].dscrp, :arg_ref_costmx[i].mtrlcode,:arg_ref_costmx[i].mtrlname, :arg_ref_costmx[i].mtrlmode, :arg_ref_costmx[i].unit,:arg_ref_costmx[i].order_mtrlid, :arg_ref_costmx[i].costamt, :arg_ref_costmx[i].trueRqqty, :arg_ref_costmx[i].scllplan_mode, :arg_ref_costmx[i].p_rqqty, :arg_ref_costmx[i].planscllqty; LOOP CLOSE cur_scllmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_outware_scllplan_mx Where 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 = "查询操作失败,单据明细1" GOTO ext END IF arg_arr_cnt = i - 1 /// // //用游标读取明细 DECLARE cur_mx_mx CURSOR FOR SELECT u_outware_scllplan_mx_mx.outwareid, u_outware_scllplan_mx_mx.printid, u_outware_scllplan_mx_mx.mtrlid, u_outware_scllplan_mx_mx.status, u_outware_scllplan_mx_mx.woodcode, u_outware_scllplan_mx_mx.pcode, u_outware_scllplan_mx_mx.storageid, u_outware_scllplan_mx_mx.qty, u_outware_scllplan_mx_mx.mxdscrp, u_outware_scllplan_mx_mx.plancode, u_mtrldef.mtrlcode, u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_storage.storagename, u_mtrldef.unit, u_outware_scllplan_mx_mx.mtrlwareid, u_outware_scllplan.scid, u_outware_scllplan_mx_mx.uqty, u_mtrldef.ifunit, u_mtrldef.unit_buy, u_outware_scllplan_mx_mx.adviceqty, u_mtrldef.scllplan_mode, u_outware_scllplan_mx_mx.p_rqqty, u_outware_scllplan_mx_mx.rate, u_outware_scllplan_mx_mx.unit FROM u_outware_scllplan_mx_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx_mx.mtrlid = u_mtrldef.mtrlid INNER JOIN u_storage ON u_outware_scllplan_mx_mx.storageid = u_storage.storageid INNER JOIN u_outware_scllplan ON u_outware_scllplan_mx_mx.outwareid = u_outware_scllplan.outwareid WHERE u_outware_scllplan_mx_mx.outwareid = :arg_outwareid Order By u_outware_scllplan_mx_mx.storageid,u_mtrldef.mtrlcode; OPEN cur_mx_mx; FETCH cur_mx_mx INTO :arg_ref_mx_mx[j].outwareid, :arg_ref_mx_mx[j].printid, :arg_ref_mx_mx[j].mtrlid, :arg_ref_mx_mx[j].status, :arg_ref_mx_mx[j].woodcode, :arg_ref_mx_mx[j].pcode,:arg_ref_mx_mx[j].storageid, :arg_ref_mx_mx[j].qty,:arg_ref_mx_mx[j].mxdscrp,:arg_ref_mx_mx[j].plancode, :arg_ref_mx_mx[j].mtrlcode,:arg_ref_mx_mx[j].mtrlname, :arg_ref_mx_mx[j].mtrlmode,:arg_ref_mx_mx[j].storagename, :arg_ref_mx_mx[j].unit, :arg_ref_mx_mx[j].mtrlwareid, :arg_ref_mx_mx[j].scid, :arg_ref_mx_mx[j].uqty, :arg_ref_mx_mx[j].ifunit, :arg_ref_mx_mx[j].unit_buy, :arg_ref_mx_mx[j].adviceqty, :arg_ref_mx_mx[j].scllplan_mode, :arg_ref_mx_mx[j].p_rqqty, :arg_ref_mx_mx[j].rate, :arg_ref_mx_mx[j].u_unit; DO WHILE sqlca.SQLCode = 0 j++ FETCH cur_mx_mx INTO :arg_ref_mx_mx[j].outwareid, :arg_ref_mx_mx[j].printid, :arg_ref_mx_mx[j].mtrlid, :arg_ref_mx_mx[j].status, :arg_ref_mx_mx[j].woodcode, :arg_ref_mx_mx[j].pcode,:arg_ref_mx_mx[j].storageid, :arg_ref_mx_mx[j].qty,:arg_ref_mx_mx[j].mxdscrp,:arg_ref_mx_mx[j].plancode, :arg_ref_mx_mx[j].mtrlcode,:arg_ref_mx_mx[j].mtrlname, :arg_ref_mx_mx[j].mtrlmode,:arg_ref_mx_mx[j].storagename, :arg_ref_mx_mx[j].unit, :arg_ref_mx_mx[j].mtrlwareid, :arg_ref_mx_mx[j].scid, :arg_ref_mx_mx[j].uqty, :arg_ref_mx_mx[j].ifunit, :arg_ref_mx_mx[j].unit_buy, :arg_ref_mx_mx[j].adviceqty, :arg_ref_mx_mx[j].scllplan_mode, :arg_ref_mx_mx[j].p_rqqty, :arg_ref_mx_mx[j].rate, :arg_ref_mx_mx[j].u_unit; LOOP CLOSE cur_mx_mx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_outware_scllplan_mx_mx Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF j <> (no_mxcheck + 1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细2" GOTO ext END IF arg_arr_cnt_mx = j - 1 ext: RETURN rslt end function public function integer p_addfactscllqty_mx (integer arg_type, long arg_outwareid, long arg_storageid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1, count, i Long ll_flag Decimal lde_factscllqty, lde_qty, tem_addqty s_outware_scllplan_mx s_scllplan_mx[] s_outware_scllplan_mx_mx s_scllplan_mx_mx[] uo_order_ml uo_order uo_order = Create uo_order_ml IF arg_outwareid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 ARG_MSG = '错误物料id唯一码' GOTO ext END IF IF arg_storageid <= 0 THEN rslt = 0 ARG_MSG = '错误仓库id唯一码' GOTO ext END IF IF arg_addqty = 0 THEN rslt = 1 GOTO ext END IF String ls_outwarecode, ls_mtrlcode Long ll_relid String ls_outrep Long ll_scid Decimal lde_costamt, ld_overqty SELECT outwarecode,relid,outrep, scid INTO :ls_outwarecode,:ll_relid,:ls_outrep, :ll_scid FROM u_outware_scllplan Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据信息失败' GOTO ext END IF SELECT mtrlcode INTO :ls_mtrlcode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询物料信息失败' GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 ARG_MSG = '单据未审核,不能增加实领数' GOTO ext END IF //更新mx IF arg_orderid > 0 THEN //按id更新 SELECT factscllqty,qty INTO :lde_factscllqty, :lde_qty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF lde_qty > lde_factscllqty + arg_addqty THEN IF lde_factscllqty > 0 THEN ARG_MSG = '备料领料数量为'+String(lde_qty,'##,##0.####')+',实际领料数'+ String(lde_factscllqty,'##,##0.####') +',不能增加实际领料数'+String(arg_addqty,'##,##0.####') ELSE ARG_MSG = '备料领料数量为'+String(lde_qty,'##,##0.####') +'不能增加实际领料数'+String(arg_addqty,'##,##0.####') END IF rslt = 0 GOTO ext END IF UPDATE u_outware_scllplan_mx SET factscllqty = factscllqty + :arg_addqty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_orderid > 0 And arg_addqty > 0 THEN IF uo_order.f_add_dstrqty(ll_scid,arg_orderid,ll_relid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& arg_addqty,lde_costamt,ARG_MSG,False,1,ld_overqty) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE //按数量分配 DECLARE mtrl_cur_mx CURSOR FOR SELECT qty, factscllqty, orderid,printid FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid Order By printid Desc; OPEN mtrl_cur_mx; count = 1 FETCH mtrl_cur_mx INTO :s_scllplan_mx[count].qty,& :s_scllplan_mx[count].factscllqty,& :s_scllplan_mx[count].orderid,& :s_scllplan_mx[count].printid; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 count++ FETCH mtrl_cur_mx INTO :s_scllplan_mx[count].qty,& :s_scllplan_mx[count].factscllqty,& :s_scllplan_mx[count].orderid,& :s_scllplan_mx[count].printid; LOOP count = count - 1 CLOSE mtrl_cur_mx; tem_addqty = arg_addqty IF arg_addqty > 0 THEN FOR i = 1 To count IF s_scllplan_mx[i].orderid > 0 THEN IF s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty >= tem_addqty THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty tem_addqty = tem_addqty - (s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty) END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND orderid = :s_scllplan_mx[i].orderid And printid = :s_scllplan_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_order.f_add_dstrqty(ll_scid,s_scllplan_mx[i].orderid,ll_relid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& lde_factscllqty,lde_costamt,ARG_MSG,False,1,ld_overqty) = 0 THEN rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT END IF NEXT IF tem_addqty <> 0 THEN ARG_MSG = '增加实领数大于备料领料单需领数' rslt = 0 GOTO ext END IF ELSE FOR i = count To 1 Step -1 IF s_scllplan_mx[i].orderid > 0 THEN IF s_scllplan_mx[i].factscllqty >= Abs(tem_addqty) THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = 0 - s_scllplan_mx[i].factscllqty tem_addqty = tem_addqty + s_scllplan_mx[i].factscllqty END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND orderid = :s_scllplan_mx[i].orderid And printid = :s_scllplan_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_order.f_add_dstrqty(ll_scid,s_scllplan_mx[i].orderid,ll_relid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& lde_factscllqty,lde_costamt,ARG_MSG,False,1,ld_overqty) = 0 THEN rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT END IF NEXT IF tem_addqty <> 0 THEN ARG_MSG = '增加实领数大于备料领料单需领数' rslt = 0 GOTO ext END IF END IF END IF //更新mxmx //按数量分配 DECLARE mtrl_cur_mxmx CURSOR FOR SELECT qty, factscllqty, printid FROM u_outware_scllplan_mx_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND storageid = :arg_storageid Order By printid Desc; OPEN mtrl_cur_mxmx; count = 1 FETCH mtrl_cur_mxmx INTO :s_scllplan_mx_mx[count].qty,& :s_scllplan_mx_mx[count].factscllqty,& :s_scllplan_mx_mx[count].printid; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 count++ FETCH mtrl_cur_mxmx INTO :s_scllplan_mx_mx[count].qty,& :s_scllplan_mx_mx[count].factscllqty,& :s_scllplan_mx_mx[count].printid; LOOP count = count - 1 CLOSE mtrl_cur_mxmx; tem_addqty = arg_addqty IF arg_addqty > 0 THEN FOR i = 1 To count IF s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty >= tem_addqty THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty tem_addqty = tem_addqty - (s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty) END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND storageid = :arg_storageid And printid = :s_scllplan_mx_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT NEXT IF tem_addqty <> 0 THEN ARG_MSG = '增加实领数大于备料领料单需领数' rslt = 0 GOTO ext END IF ELSE FOR i = count To 1 Step -1 IF s_scllplan_mx_mx[i].factscllqty >= Abs(tem_addqty) THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = 0 - s_scllplan_mx_mx[i].factscllqty tem_addqty = tem_addqty + s_scllplan_mx_mx[i].factscllqty END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND storageid = :arg_storageid And printid = :s_scllplan_mx_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT NEXT IF tem_addqty <> 0 THEN ARG_MSG = '增加实领数大于备料领料单需领数' rslt = 0 GOTO ext END IF END IF ext: Destroy uo_order RETURN rslt end function public function integer uof_update_mtrlflag (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_trueRqqty,ld_DstrQty,ld_sumplanqty,ld_factscllqty Int li_ifoutware SELECT SUM(trueRqqty), SUM(DstrQty) INTO :ld_trueRqqty, :ld_DstrQty FROM u_OrderRqMtrl_scll WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工组用料情况失败,'+sqlca.SQLErrText GOTO ext END IF SELECT sum(u_outware_scllplan_mx.qty), sum(u_outware_scllplan_mx.factscllqty) INTO :ld_sumplanqty, :ld_factscllqty FROM u_outware_scllplan_mx INNER JOIN u_outware_scllplan ON u_outware_scllplan_mx.outwareid = u_outware_scllplan.outwareid WHERE u_outware_scllplan.scid = :arg_scid AND u_outware_scllplan_mx.orderid = :arg_orderid And u_outware_scllplan.wkpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工组备料情况失败,'+sqlca.SQLErrText GOTO ext END IF IF ld_trueRqqty > ld_sumplanqty THEN IF ld_sumplanqty = 0 THEN li_ifoutware = 1 ELSEIF ld_sumplanqty > 0 THEN li_ifoutware = 2 END IF ELSE IF ld_trueRqqty > ld_DstrQty THEN li_ifoutware = 3 ELSE li_ifoutware = 6 END IF END IF UPDATE u_ordermtrl_wrk_mtrl SET ifoutware = :li_ifoutware WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_ordermtrl_wrk_mtrl (scid, orderid, wrkgrpid, ifoutware) VALUES (:arg_scid, :arg_orderid, :arg_wrkgrpid, :li_ifoutware); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入用料状态失败'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '更新用料状态失败,'+sqlca.SQLErrText GOTO ext END IF //更新指令单领料状态 UPDATE u_Order_ml SET u_Order_ml.dstrflag = isnull(uv_order_scllplan_flag.scllflag,0) FROM u_Order_ml LEFT OUTER JOIN uv_order_scllplan_flag ON u_Order_ml.scid = uv_order_scllplan_flag.scid AND u_Order_ml.OrderID = uv_order_scllplan_flag.OrderID WHERE u_Order_ml.scid = :arg_scid And u_Order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单领料状态失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer audit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit, ref long arg_relid[]);Int rslt = 1 Long ll_flag Long ll_relbillid_return[],ll_cnt uo_order_ml uo_order uo_order = Create uo_order_ml uo_order_ml_mtrl_change uo_mtrl_ch uo_mtrl_ch = Create uo_order_ml_mtrl_change IF uo_option_scllplan_outware_auto = -1000 THEN arg_msg = '选项:[248]发料通知单审核自动生成发料单,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF uo_option_scllplan_noscllmx = -1000 THEN arg_msg = '选项:[405]发料通知单不使用领料明细,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 0 THEN rslt = 0 arg_msg = '单据不是在待审核状态,不可以再审' GOTO ext END IF // s_outware_scllplan_mx s_scll_mx[] s_outware_scllplan_mx_mx s_scll_mx_mx[] Long ll_mx_cnt,ll_mx_mx_cnt IF getinfo(arg_outwareid,s_scll_mx,s_scll_mx_mx,ll_mx_cnt,ll_mx_mx_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF String ls_outwarecode Long ll_wrkgrpid, ll_scid , ll_relid,ll_wkpid String ls_outrep,ls_relcode DateTime ld_outdate Int li_not_scll SELECT outwarecode,wrkgrpid,outrep, scid, relid,wkpid,outdate,relcode,not_scll INTO :ls_outwarecode,:ll_wrkgrpid,:ls_outrep, :ll_scid, :ll_relid,:ll_wkpid,:ld_outdate,:ls_relcode,:li_not_scll FROM u_outware_scllplan Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败' GOTO ext END IF //更新审核标记 UPDATE u_outware_scllplan SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE outwareid = :arg_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 Long ll_i Decimal ld_noallocqty Long ll_mtrlwareid Decimal ld_notdstrqty Decimal lde_cost Long ll_mxbt = 0 Decimal ld_planqty,ld_scllqty if uo_option_scllplan_noscllmx = 0 then FOR ll_i = 1 To ll_mx_mx_cnt IF s_scll_mx_mx[ll_i].mtrlwareid > 0 THEN SELECT top 1 noallocqty,cost INTO :ld_noallocqty, :lde_cost FROM u_mtrlware WHERE mtrlwareid = :s_scll_mx_mx[ll_i].mtrlwareid AND scid = :s_scll_mx_mx[ll_i].scid Order By noallocqty Desc; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料库存失败,物料:['+s_scll_mx_mx[ll_i].mtrlcode+'],'+s_scll_mx_mx[ll_i].mtrlname+',仓库:'+s_scll_mx_mx[ll_i].storagename GOTO ext END IF // s_scll_mx_mx[ll_i].cost = lde_cost s_scll_mx_mx[ll_i].costamt = lde_cost * s_scll_mx_mx[ll_i].qty END IF IF s_scll_mx_mx[ll_i].scllplan_mode = 0 THEN IF ld_noallocqty < s_scll_mx_mx[ll_i].qty THEN rslt = 0 arg_msg = '库存数量不足,物料:['+s_scll_mx_mx[ll_i].mtrlcode+'],'+s_scll_mx_mx[ll_i].mtrlname+',仓库:'+s_scll_mx_mx[ll_i].storagename+',总领料数:'+String(s_scll_mx_mx[ll_i].qty,'#,##0.0####')+',库存数:'+String(ld_noallocqty,'#,##0.0####') GOTO ext END IF END IF NEXT end if Long ll_storageid[] Long ll_j,ll_st_cnt Decimal ld_uqty,ld_rate String ls_unit IF uo_option_scllplan_outware_auto = 1 And li_not_scll = 0 and uo_option_scllplan_noscllmx = 0 THEN //生成领料单 FOR ll_i = 1 To ll_mx_mx_cnt FOR ll_j = 1 To ll_st_cnt IF ll_storageid[ll_j] = s_scll_mx_mx[ll_i].storageid THEN GOTO next_mx END IF NEXT ll_st_cnt++ ll_storageid[ll_st_cnt] = s_scll_mx_mx[ll_i].storageid next_mx: NEXT // //FOR ll_i = 1 TO ll_st_cnt // IF uf_warebalc_check_balcflag(ll_storageid[ll_i],arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF //NEXT Long ll_k,ll_l FOR ll_k = 1 To ll_st_cnt ll_mxbt = 0 uo_outware_scll uo_scll uo_scll = Create uo_outware_scll IF uo_scll.newbegin(ll_scid, 3,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_scll.commit_transaction = sqlca uo_scll.outdate = ld_outdate // 发生时间 uo_scll.outrep = ls_outrep // 经手人 uo_scll.part = ls_outwarecode //相关号码 IF Trim(ls_relcode) = '' THEN uo_scll.dscrp = "发料通知单"+ls_outwarecode+"自动生成" //备注 ELSE uo_scll.dscrp = "发料通知单"+ls_outwarecode+"自动生成,相关号:"+ls_relcode //备注 END IF uo_scll.cusname = "发料通知单"+ls_outwarecode+"自动生成" //领出原因 uo_scll.storageid = ll_storageid[ll_k] uo_scll.relid = ll_relid //领料组,必须 uo_scll.relint_1 = 4 //发料单 uo_scll.relint_2 = ll_wkpid //工组 uo_scll.relint_3 = arg_outwareid uo_scll.ifauto = 1 // 自动建立 uo_scll.if_getid_ture = False FOR ll_l = 1 To ll_mx_mx_cnt IF s_scll_mx_mx[ll_l].storageid = ll_storageid[ll_k] THEN IF s_scll_mx_mx[ll_l].mtrlid > 0 And s_scll_mx_mx[ll_l].mtrlwareid > 0 THEN IF s_scll_mx_mx[ll_l].scllplan_mode = 0 THEN ld_planqty = s_scll_mx_mx[ll_l].adviceqty ld_scllqty = s_scll_mx_mx[ll_l].adviceqty ELSE ld_planqty = s_scll_mx_mx[ll_l].p_rqqty ld_scllqty = s_scll_mx_mx[ll_l].adviceqty END IF IF s_scll_mx_mx[ll_l].rate > 0 THEN ld_uqty = ld_scllqty / s_scll_mx_mx[ll_l].rate ELSE ld_uqty = ld_scllqty END IF IF ld_planqty = 0 And ld_scllqty = 0 And ld_uqty = 0 THEN CONTINUE ll_mxbt++ IF uo_scll.acceptmx( s_scll_mx_mx[ll_l].mtrlwareid,& ld_scllqty ,& s_scll_mx_mx[ll_l].cost,& 1,& s_scll_mx_mx[ll_l].mxdscrp,& ll_l,& arg_msg,& 1,& arg_outwareid,& 0,& 0,'',ld_planqty,s_scll_mx_mx[ll_l].printid,& s_scll_mx_mx[ll_l].u_unit,& ld_uqty,s_scll_mx_mx[ll_l].rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT IF ll_mxbt > 0 THEN IF uo_scll.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_scll NEXT END IF s_order_ml_mtrl_change arg_s_mtrl_ch s_order_ml_mtrl_change_mx arg_s_mx[],arg_s_empty_mx[] FOR ll_i = 1 To ll_mx_cnt IF s_scll_mx[ll_i].scllplan_mode <> 2 THEN CONTINUE IF s_scll_mx[ll_i].planscllqty = s_scll_mx[ll_i].p_rqqty THEN CONTINUE arg_s_mtrl_ch.scid = ll_scid arg_s_mtrl_ch.billid = 0 arg_s_mtrl_ch.billdate = ld_outdate arg_s_mtrl_ch.billemp = publ_operator arg_s_mtrl_ch.relcode = ls_outwarecode arg_s_mtrl_ch.dscrp = '发料通知单审核自动生成' arg_s_mtrl_ch.orderid = s_scll_mx[ll_i].orderid arg_s_mtrl_ch.smtrlid = s_scll_mx[ll_i].mtrlid arg_s_mtrl_ch.wrkgrpid = ll_wkpid arg_s_mtrl_ch.status = s_scll_mx[ll_i].status arg_s_mtrl_ch.woodcode = s_scll_mx[ll_i].woodcode arg_s_mtrl_ch.pcode = s_scll_mx[ll_i].pcode arg_s_mtrl_ch.sqty = s_scll_mx[ll_i].planscllqty arg_s_mtrl_ch.dmtrlid = s_scll_mx[ll_i].mtrlid arg_s_mtrl_ch.dqty = s_scll_mx[ll_i].p_rqqty arg_s_mtrl_ch.billtype = 1 arg_s_mtrl_ch.ifchange = 1 //加明细 arg_s_mx = arg_s_empty_mx IF f_addmx_mtrl_change(ll_scid,s_scll_mx[ll_i].orderid,s_scll_mx[ll_i].mtrlid,ll_wkpid,s_scll_mx[ll_i].status,s_scll_mx[ll_i].woodcode,s_scll_mx[ll_i].pcode,s_scll_mx[ll_i].planscllqty,s_scll_mx[ll_i].p_rqqty,arg_s_mx,arg_msg) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,生成生产指令单换料单失败,原因:计算单据明细失败.'+arg_msg GOTO ext END IF arg_s_mtrl_ch.arg_s_mx = arg_s_mx IF uo_mtrl_ch.Save(arg_s_mtrl_ch,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,生成生产指令单换料单失败,'+arg_msg GOTO ext END IF IF uo_mtrl_ch.audit(uo_mtrl_ch.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,审核相关生产指令单换料单失败,'+arg_msg GOTO ext END IF ll_cnt++ ll_relbillid_return[ll_cnt] = uo_mtrl_ch.uo_billid NEXT arg_relid = ll_relbillid_return //更新领料明细发料通知单数 FOR ll_i = 1 To ll_mx_cnt IF s_scll_mx[ll_i].scllplan_mode = 0 THEN IF uo_order.f_add_flqty(ll_scid,s_scll_mx[ll_i].orderid,ll_wkpid,& s_scll_mx[ll_i].mtrlid,s_scll_mx[ll_i].mtrlcode,& s_scll_mx[ll_i].status,s_scll_mx[ll_i].woodcode,s_scll_mx[ll_i].pcode,& s_scll_mx[ll_i].qty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT // // ////更新已领数 //Long ll_m //decimal ld_overqty //uo_order_ml uo_order //uo_order = CREATE uo_order_ml // //FOR ll_m = 1 TO ll_mx_cnt // IF s_scll_mx[ll_m].orderid > 0 AND s_scll_mx[ll_m].qty > 0 THEN // IF uo_order.f_add_dstrqty(ll_scid,s_scll_mx[ll_m].orderid,ll_wkpid,& // s_scll_mx[ll_m].mtrlid,s_scll_mx[ll_m].mtrlcode,& // s_scll_mx[ll_m].status,s_scll_mx[ll_m].woodcode,s_scll_mx[ll_m].pcode,& // s_scll_mx[ll_m].qty,s_scll_mx[ll_m].costamt,arg_msg,FALSE,0,ld_overqty) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF //NEXT // ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_mtrl_ch Destroy uo_order RETURN rslt end function public function integer caudit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit, ref long arg_relid[]);Int rslt = 1 Long ll_flag Long cnt Long ll_cnt,ll_i DateTime null_dt Long ll_cnt_re,ll_relbillid_return[] uo_order_ml uo_order uo_order = Create uo_order_ml IF uo_option_scllplan_outware_auto = -1000 THEN arg_msg = '选项:[248]发料通知单审核自动生成发料单,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF SetNull(null_dt) IF arg_outwareid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 arg_msg = '单据不是在审核状态,不可以撤审' GOTO ext END IF SELECT COUNT(*) INTO :cnt FROM u_outware_scllplan_mx INNER JOIN u_Order_ml ON u_outware_scllplan_mx.orderid = u_Order_ml.OrderID WHERE (u_outware_scllplan_mx.qty > 0) AND (u_Order_ml.Status = 5) And u_outware_scllplan_mx.outwareid = :arg_outwareid; s_outware_scllplan_mx s_scll_mx[] s_outware_scllplan_mx_mx s_scll_mx_mx[] Long ll_mx_cnt,ll_mx_mx_cnt IF getinfo(arg_outwareid,s_scll_mx,s_scll_mx_mx,ll_mx_cnt,ll_mx_mx_cnt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF // String ls_outwarecode Long ll_wrkgrpid, ll_scid , ll_relid,ll_wkpid String ls_outrep DateTime ld_outdate SELECT outwarecode,wrkgrpid,outrep, scid, relid,wkpid,outdate INTO :ls_outwarecode,:ll_wrkgrpid,:ls_outrep, :ll_scid, :ll_relid,:ll_wkpid,:ld_outdate FROM u_outware_scllplan Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据信息失败' GOTO ext END IF //检查是否有相关领料单已审 IF uo_option_scllplan_outware_auto = 0 THEN ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_outware WHERE billtype = 3 AND relint_1 = 4 And relint_3 = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有相关领料单失败' GOTO ext END IF IF ll_cnt > 0 THEN rslt = 0 arg_msg = '有相关领料单,不允许撤审,请先撤审相关领料单' GOTO ext END IF END IF IF uo_option_scllplan_outware_auto = 1 THEN //检查是否已审核 ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_outware WHERE billtype = 3 AND relint_1 = 4 AND flag = 1 And relint_3 = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询是否有相关领料单已审核失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_cnt > 0 THEN rslt = 0 arg_msg = '有相关领料单已审核,不允许撤审,请先撤审相关领料单' GOTO ext END IF //删除相关领料单 DELETE u_outwaremx FROM u_outwaremx,u_outware WHERE u_outware.relint_3 = :arg_outwareid AND u_outwaremx.outwareid = u_outware.outwareid AND u_outwaremx.scid = u_outware.scid AND u_outware.billtype = 3 AND u_outware.relint_1 = 4 And u_outware.flag = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除领料单明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_outware WHERE u_outware.relint_3 = :arg_outwareid AND u_outware.ifauto = 1 AND u_outware.relint_1 = 4 AND u_outware.billtype = 3 And u_outware.flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除领料单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF uo_order_ml_mtrl_change uo_mtrl_ch uo_mtrl_ch = Create uo_order_ml_mtrl_change s_order_ml_mtrl_change arg_s_mtrl_ch s_order_ml_mtrl_change_mx arg_s_mx[],arg_s_empty_mx[] FOR ll_i = 1 To ll_mx_cnt IF s_scll_mx[ll_i].scllplan_mode <> 2 THEN CONTINUE IF s_scll_mx[ll_i].planscllqty = s_scll_mx[ll_i].p_rqqty THEN CONTINUE arg_s_mtrl_ch.scid = ll_scid arg_s_mtrl_ch.billid = 0 arg_s_mtrl_ch.billdate = ld_outdate arg_s_mtrl_ch.billemp = publ_operator arg_s_mtrl_ch.relcode = ls_outwarecode arg_s_mtrl_ch.dscrp = '发料通知单审核自动生成' arg_s_mtrl_ch.orderid = s_scll_mx[ll_i].orderid arg_s_mtrl_ch.smtrlid = s_scll_mx[ll_i].mtrlid arg_s_mtrl_ch.wrkgrpid = ll_wkpid arg_s_mtrl_ch.Status = s_scll_mx[ll_i].Status arg_s_mtrl_ch.woodcode = s_scll_mx[ll_i].woodcode arg_s_mtrl_ch.pcode = s_scll_mx[ll_i].pcode arg_s_mtrl_ch.sqty = s_scll_mx[ll_i].p_rqqty arg_s_mtrl_ch.dmtrlid = s_scll_mx[ll_i].mtrlid arg_s_mtrl_ch.dqty = s_scll_mx[ll_i].planscllqty arg_s_mtrl_ch.billtype = 1 arg_s_mtrl_ch.ifchange = 1 //加明细 arg_s_mx = arg_s_empty_mx IF f_addmx_mtrl_change(ll_scid,s_scll_mx[ll_i].orderid,s_scll_mx[ll_i].mtrlid,ll_wkpid,s_scll_mx[ll_i].Status,s_scll_mx[ll_i].woodcode,s_scll_mx[ll_i].pcode,s_scll_mx[ll_i].p_rqqty,s_scll_mx[ll_i].planscllqty,arg_s_mx,arg_msg) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,生成生产指令单换料单失败,原因:计算单据明细失败.'+arg_msg GOTO ext END IF arg_s_mtrl_ch.arg_s_mx = arg_s_mx IF uo_mtrl_ch.Save(arg_s_mtrl_ch,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,生成生产指令单换料单失败,'+arg_msg GOTO ext END IF IF uo_mtrl_ch.audit(uo_mtrl_ch.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '需求明细第'+String(ll_i)+'行,审核相关生产指令单换料单失败,'+arg_msg GOTO ext END IF ll_cnt_re++ ll_relbillid_return[ll_cnt_re] = uo_mtrl_ch.uo_billid NEXT arg_relid = ll_relbillid_return //更新领料明细发料通知单数 FOR ll_i = 1 To ll_mx_cnt IF s_scll_mx[ll_i].scllplan_mode = 0 THEN IF uo_order.f_add_flqty(ll_scid,s_scll_mx[ll_i].orderid,ll_wkpid,& s_scll_mx[ll_i].mtrlid,s_scll_mx[ll_i].mtrlcode,& s_scll_mx[ll_i].Status,s_scll_mx[ll_i].woodcode,s_scll_mx[ll_i].pcode,& 0 - s_scll_mx[ll_i].qty,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT // //更新已领数 //Long ll_m //decimal ld_overqty //uo_order_ml uo_order //uo_order = CREATE uo_order_ml // //FOR ll_m = 1 TO ll_mx_cnt // IF s_scll_mx[ll_m].orderid > 0 AND s_scll_mx[ll_m].qty > 0 THEN // IF uo_order.f_add_dstrqty(ll_scid,s_scll_mx[ll_m].orderid,ll_wkpid,& // s_scll_mx[ll_m].mtrlid,s_scll_mx[ll_m].mtrlcode,& // s_scll_mx[ll_m].status,s_scll_mx[ll_m].woodcode,s_scll_mx[ll_m].pcode,& // 0 - s_scll_mx[ll_m].qty,s_scll_mx[ll_m].costamt,arg_msg,FALSE,0,ld_overqty) = 0 THEN // rslt = 0 // GOTO ext // END IF // END IF //NEXT //更新审核标记 UPDATE u_outware_scllplan SET auditingrep = '', auditingdate = :null_dt, flag = 0 Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_mtrl_ch Destroy uo_order RETURN rslt end function protected function integer uof_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg);Long ll_pmtrlid,ll_produce_wrkGrpid,ll_ordertype,ll_porderid String ls_ordercode,ls_relcode, ls_taskrelcode Decimal ld_rqqty Long ll_mtrlorigin Int rslt = 1 Long ll_row Long i Long ll_porderid_arr[] String ls_ordercode_arr[],ls_relcode_arr[], ls_taskrelcode_arr[] Long ll_i Long ll_mtrlid_arr[] Long j Long ll_j Boolean lb_iffind = False Decimal ld_DstrQty i = 1 j = 1 Select ordertype,mtrlid Into :ll_ordertype,:ll_pmtrlid From u_order_ml Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询指令单相关信息失败'+"~n"+sqlca.SQLErrText Goto ext End If If ll_ordertype <> 4 Then //生产计划,明细插入自己本身 Select top 1 produce_wrkGrpid Into :ll_produce_wrkGrpid From u_orderrqmtrl_tree Where scid = :arg_scid And orderid = :arg_orderid And pmtrlid = :ll_pmtrlid And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then If sqlca.SQLCode = 100 Then Declare cur_mtrlmx Cursor For Select u_orderrqmtrl_tree.mtrlid From u_orderrqmtrl_tree,u_mtrldef Where u_orderrqmtrl_tree.scid = :arg_scid And u_orderrqmtrl_tree.orderid = :arg_orderid And u_orderrqmtrl_tree.pmtrlid = :ll_pmtrlid And u_orderrqmtrl_tree.mtrlid = u_mtrldef.mtrlid And u_mtrldef.ifselforder = 0; Open cur_mtrlmx; Fetch cur_mtrlmx Into :ll_mtrlid_arr[j]; Do While sqlca.SQLCode = 0 j++ Fetch cur_mtrlmx Into :ll_mtrlid_arr[j]; Loop Close cur_mtrlmx; If j - 1 = 0 Then rslt = 0 ARG_MSG = '查询运算数据失败2' Goto ext End If For ll_j = 1 To j - 1 Select top 1 produce_wrkGrpid Into :ll_produce_wrkGrpid From u_orderrqmtrl_tree Where scid = :arg_scid And orderid = :arg_orderid And pmtrlid = :ll_mtrlid_arr[ll_j] And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then Continue Else lb_iffind = True Exit End If Next If lb_iffind = False Then rslt = 0 ARG_MSG = '查询运算数据失败3' Goto ext End If Else rslt = 0 ARG_MSG = '查询运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Select mtrlorigin Into :ll_mtrlorigin From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText Goto ext End If If ll_mtrlorigin = 6 Then ll_mtrlorigin = 0 If ll_mtrlorigin <> 0 Then ll_produce_wrkGrpid = 0 //yyx20101020 // IF ll_mtrlorigin = 3 THEN ll_produce_wrkGrpid = 0 //yyx20100622 Select rqqty,DstrQty Into :ld_rqqty,:ld_DstrQty From u_orderrqmtrl Where scid = :arg_scid And orderid = :arg_orderid And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode And plantype = :ll_mtrlorigin And produce_wrkGrpid = :ll_produce_wrkGrpid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText Goto ext End If Select ordercode,relcode, taskrelcode Into :ls_ordercode,:ls_relcode , :ls_taskrelcode From u_order_ml Where orderid = :arg_orderid And scid = :arg_scid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询主生产计划信息失败'+"~n"+sqlca.SQLErrText Goto ext End If ll_row++ arg_s_mx[ll_row].printid = ll_row arg_s_mx[ll_row].orderid = arg_orderid arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty Else //生产指令单,搜索明细表得出相关主生产计划 Declare cur_mx Cursor For Select u_order_ml_mx.taskid, u_order_ml_mx.taskcode, u_order_ml.relcode, u_order_ml.taskrelcode From u_order_ml_mx, u_order_ml Where ( u_order_ml_mx.scid = u_order_ml.scid ) And ( u_order_ml_mx.taskid = u_order_ml.orderid ) And ( u_order_ml_mx.orderid = :arg_orderid ) And ( u_order_ml_mx.scid = :arg_scid ) ; Open cur_mx; Fetch cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i]; Do While sqlca.SQLCode = 0 i++ Fetch cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i]; Loop Close cur_mx; For ll_i = 1 To i - 1 Select top 1 produce_wrkGrpid Into :ll_produce_wrkGrpid From u_orderrqmtrl_tree Where scid = :arg_scid And orderid = :ll_porderid_arr[ll_i] And pmtrlid = :ll_pmtrlid And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then If sqlca.SQLCode = 100 Then Declare cur_mtrlmx_1 Cursor For Select u_orderrqmtrl_tree.mtrlid From u_orderrqmtrl_tree,u_mtrldef Where u_orderrqmtrl_tree.scid = :arg_scid And u_orderrqmtrl_tree.orderid = :ll_porderid_arr[ll_i] And u_orderrqmtrl_tree.pmtrlid = :ll_pmtrlid And u_orderrqmtrl_tree.mtrlid = u_mtrldef.mtrlid And u_mtrldef.ifselforder = 0; Open cur_mtrlmx_1; Fetch cur_mtrlmx_1 Into :ll_mtrlid_arr[j]; Do While sqlca.SQLCode = 0 j++ Fetch cur_mtrlmx_1 Into :ll_mtrlid_arr[j]; Loop Close cur_mtrlmx_1; If j - 1 = 0 Then rslt = 0 ARG_MSG = '查询运算数据失败2' Goto ext End If For ll_j = 1 To j - 1 Select top 1 produce_wrkGrpid Into :ll_produce_wrkGrpid From u_orderrqmtrl_tree Where scid = :arg_scid And orderid = :ll_porderid_arr[ll_i] And pmtrlid = :ll_mtrlid_arr[ll_j] And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode; If sqlca.SQLCode <> 0 Then Continue Else lb_iffind = True Exit End If Next If lb_iffind = False Then If ll_i = i - 1 Then rslt = 0 ARG_MSG = '查询运算数据失败3' Goto ext Else Continue End If End If Else rslt = 0 ARG_MSG = '查询运算数据失败'+"~n"+sqlca.SQLErrText Goto ext End If End If Select mtrlorigin Into :ll_mtrlorigin From u_mtrldef Where mtrlid = :arg_mtrlid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText Goto ext End If If ll_mtrlorigin = 6 Then ll_mtrlorigin = 0 IF ll_mtrlorigin <> 0 THEN ll_produce_wrkGrpid = 0 Select rqqty,DstrQty Into :ld_rqqty,:ld_DstrQty From u_orderrqmtrl Where scid = :arg_scid And orderid = :ll_porderid_arr[ll_i] And mtrlid = :arg_mtrlid And wrkgrpid = :arg_wrkgrpid And status = :arg_status And woodcode = :arg_woodcode And pcode = :arg_pcode And plantype = :ll_mtrlorigin And produce_wrkGrpid = :ll_produce_wrkGrpid; If sqlca.SQLCode <> 0 Then rslt = 0 ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText Goto ext End If ll_row++ arg_s_mx[ll_row].printid = ll_row arg_s_mx[ll_row].orderid = ll_porderid_arr[ll_i] arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty Next End If Decimal ld_sumqty ld_sumqty = 0 For ll_i = 1 To ll_row ld_sumqty = ld_sumqty + arg_s_mx[ll_i].rateqty Next For ll_i = 1 To ll_row If ld_sumqty > 0 Then arg_s_mx[ll_i].rqqty_ori = arg_sqty / ld_sumqty * arg_s_mx[ll_i].rateqty arg_s_mx[ll_i].rqqty = arg_dqty / ld_sumqty * arg_s_mx[ll_i].rateqty Else arg_s_mx[ll_i].rqqty_ori = 0 arg_s_mx[ll_i].rqqty = 0 End If Next ext: Return rslt end function public function integer uof_stopqty (long arg_outwareid, long arg_printid, decimal arg_stopqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_qty,ld_p_rqqty,ld_factscllqty,ld_stopqty,ld_scllqty,ld_stopqty_tmp,ld_stopqty_update Int li_scllplan_mode Long ll_mtrlid,count,ll_i String ls_status,ls_woodcode,ls_pcode Decimal ld_scllqty_mx[],ld_factscllqty_mx[],ld_stopqty_mx[],ld_qty_mx[],ld_p_rqqty_mx[] Long ll_printid_mx[] SELECT u_outware_scllplan_mx.qty, u_outware_scllplan_mx.p_rqqty, u_outware_scllplan_mx.factscllqty, u_mtrldef.scllplan_mode, u_outware_scllplan_mx.stopqty, u_outware_scllplan_mx.mtrlid, u_outware_scllplan_mx.status, u_outware_scllplan_mx.woodcode, u_outware_scllplan_mx.pcode INTO :ld_qty, :ld_p_rqqty, :ld_factscllqty, :li_scllplan_mode, :ld_stopqty, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode FROM u_outware_scllplan_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx.mtrlid = u_mtrldef.mtrlid WHERE u_outware_scllplan_mx.outwareid = :arg_outwareid And u_outware_scllplan_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询发料通知单需求明细信息失败,'+sqlca.SQLErrText GOTO ext END IF IF li_scllplan_mode = 0 THEN ld_scllqty = ld_qty ELSE ld_scllqty = ld_p_rqqty END IF IF arg_stopqty > ld_scllqty + ld_stopqty - ld_factscllqty THEN rslt = 0 arg_msg = '可终止数只有:'+String(ld_scllqty + ld_stopqty - ld_factscllqty,'###0.##########')+',不能终止:'+String(arg_stopqty,'###0.##########') GOTO ext END IF UPDATE u_outware_scllplan_mx SET stopqty = :arg_stopqty, qty = :ld_qty + :ld_stopqty - :arg_stopqty, p_rqqty = :ld_p_rqqty + :ld_stopqty - :arg_stopqty WHERE outwareid = :arg_outwareid And printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新发料通知单需求明细信息失败,'+sqlca.SQLErrText GOTO ext END IF DECLARE mtrl_cur_mxmx CURSOR FOR SELECT case u_mtrldef.scllplan_mode when 0 then u_outware_scllplan_mx_mx.qty else u_outware_scllplan_mx_mx.p_rqqty END , u_outware_scllplan_mx_mx.factscllqty, u_outware_scllplan_mx_mx.stopqty, u_outware_scllplan_mx_mx.printid, u_outware_scllplan_mx_mx.qty, u_outware_scllplan_mx_mx.p_rqqty FROM u_outware_scllplan_mx_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx_mx.mtrlid = u_mtrldef.mtrlid WHERE u_outware_scllplan_mx_mx.outwareid = :arg_outwareid AND u_outware_scllplan_mx_mx.mtrlid = :ll_mtrlid AND u_outware_scllplan_mx_mx.status = :ls_status AND u_outware_scllplan_mx_mx.woodcode = :ls_woodcode AND u_outware_scllplan_mx_mx.pcode = :ls_pcode Order By u_outware_scllplan_mx_mx.printid Desc; OPEN mtrl_cur_mxmx; count = 1 FETCH mtrl_cur_mxmx INTO :ld_scllqty_mx[count],& :ld_factscllqty_mx[count],& :ld_stopqty_mx[count],& :ll_printid_mx[count],& :ld_qty_mx[count],& :ld_p_rqqty_mx[count]; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 count++ FETCH mtrl_cur_mxmx INTO :ld_scllqty_mx[count],& :ld_factscllqty_mx[count],& :ld_stopqty_mx[count],& :ll_printid_mx[count],& :ld_qty_mx[count],& :ld_p_rqqty_mx[count]; LOOP count = count - 1 CLOSE mtrl_cur_mxmx; ld_stopqty_tmp = arg_stopqty - ld_stopqty FOR ll_i = 1 To count IF ld_stopqty_tmp = 0 THEN EXIT IF ld_stopqty_tmp > 0 THEN IF ld_stopqty_tmp > ld_scllqty_mx[ll_i] - ld_factscllqty_mx[ll_i] THEN ld_stopqty_update = ld_scllqty_mx[ll_i] - ld_factscllqty_mx[ll_i] ld_stopqty_tmp = ld_stopqty_tmp - ld_stopqty_update ELSE ld_stopqty_update = ld_stopqty_tmp ld_stopqty_tmp = 0 END IF ELSE IF Abs(ld_stopqty_tmp) > ld_stopqty_mx[ll_i] THEN ld_stopqty_update = 0 - ld_stopqty_mx[ll_i] ld_stopqty_tmp = ld_stopqty_tmp + ld_stopqty_mx[ll_i] ELSE ld_stopqty_update = ld_stopqty_tmp ld_stopqty_tmp = 0 END IF END IF UPDATE u_outware_scllplan_mx_mx SET stopqty = stopqty + :ld_stopqty_update, qty = :ld_qty_mx[ll_i] - :ld_stopqty_update, uqty = case rate when 0 then :ld_qty_mx[ll_i] - :ld_stopqty_tmp else (:ld_qty_mx[ll_i] - :ld_stopqty_update )/ rate END, p_rqqty = :ld_p_rqqty_mx[ll_i] - :ld_stopqty_update WHERE outwareid = :arg_outwareid And printid = :ll_printid_mx[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新发料通知单领料明细信息失败,'+sqlca.SQLErrText GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer p_addfactscllqty (long arg_outwareid, long arg_mtrlwareid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_uqty, ref decimal arg_overqty, decimal arg_costamt, decimal arg_addflqty, integer arg_auditflag, boolean arg_ifcommit, ref string arg_msg);/* arg_qty < 0 审核,少领, 减已领数 arg_qty > 0 撤审,少领, 加已领数 */ Long rslt = 1, count, i,ll_i,j Long ll_flag Decimal lde_factscllqty, lde_qty, tem_addqty,tem_adduqty,tmp_addflqty Decimal lde_factsclluqty,lde_uqty Decimal lde_flqty s_outware_scllplan_mx s_scllplan_mx[] s_outware_scllplan_mx_mx s_scllplan_mx_mx[] ins_itmx_aps = 0 ins_s_rqmtrl = ins_s_empty uo_order_ml uo_order uo_order = Create uo_order_ml uo_mtrlware_assign uo_ma uo_ma = Create uo_mtrlware_assign uo_ma.commit_transaction = sqlca //库存分配ds datastore ds_out_assign ds_out_assign = Create datastore IF arg_qty > 0 THEN ds_out_assign.DataObject = 'ds_outwaremx_assign_scll' ELSE ds_out_assign.DataObject = 'ds_outwaremx_assign_cancel_scll' END IF ds_out_assign.SetTransObject(sqlca) //分配用变量 Decimal ld_assign_outqty,ld_sumnotoutqty,ld_sumnotoutqty_bill,ld_qty_tmp Long ll_row Long ll_porderid,ll_orderid_retrieve Int li_ordertype_zl IF arg_outwareid <= 0 THEN rslt = 0 ARG_MSG = '错误单据唯一码' GOTO ext END IF IF arg_mtrlid <= 0 THEN rslt = 0 ARG_MSG = '错误物料id唯一码' GOTO ext END IF IF arg_storageid <= 0 THEN rslt = 0 ARG_MSG = '错误仓库id唯一码' GOTO ext END IF Int li_storagetype SELECT storagetype INTO :li_storagetype FROM u_storage Where storageid = :arg_storageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = "查询操作失败,仓库" GOTO ext END IF //IF arg_qty = 0 THEN // rslt = 1 // GOTO ext //END IF String ls_outwarecode, ls_mtrlcode Long ll_wrkgrpid String ls_outrep Decimal lde_costamt Decimal ld_overqty Long ll_scid,ll_relid Int li_mtrlkind,li_iffp,li_scllplan_mode Decimal ld_sumqty,ld_sumqty_p SELECT outwarecode,outrep,scid,relid,wkpid INTO :ls_outwarecode,:ls_outrep , :ll_scid,:ll_relid,:ll_wrkgrpid FROM u_outware_scllplan Where outwareid = :arg_outwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询单据信息失败' GOTO ext END IF SELECT mtrlcode,mtrlkind,iffp,scllplan_mode INTO :ls_mtrlcode,:li_mtrlkind,:li_iffp,:li_scllplan_mode FROM u_mtrldef Where mtrlid = :arg_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询物料信息失败' GOTO ext END IF IF p_getflag(arg_outwareid,ll_flag,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF ll_flag <> 1 THEN rslt = 0 ARG_MSG = '单据未审核,不能增加实领数' GOTO ext END IF lde_costamt = arg_costamt // //Dyy修改2013-02-23: 改为不限制,多出部分加入车间仓.代码于uo_outware_scll.audit ////检查超数量 //If li_mtrlkind = 0 Then // Select sum(qty - factscllqty),sum(p_rqqty - factscllqty) // Into :ld_sumqty,:ld_sumqty_p // From u_outware_scllplan_mx_mx // Where outwareid = :arg_outwareid // And mtrlid = :arg_mtrlid // And storageid = :arg_storageid // And status = :arg_status // And woodcode = :arg_woodcode // And pcode = :arg_pcode ; // If sqlca.SQLCode <> 0 Then // ARG_MSG = '查询发料通知单计划领用数失败,'+sqlca.SQLErrText // rslt = 0 // Goto ext // End If // // If li_scllplan_mode = 0 Then // If arg_qty > ld_sumqty Then // ARG_MSG = '发料通知单计划未领数只有:'+String(ld_sumqty,'###0.##########')+',不能领料:'+String(arg_qty,'###0.##########') // rslt = 0 // Goto ext // End If // Else // If arg_qty > ld_sumqty_p Then // ARG_MSG = '发料通知单计划未领数只有:'+String(ld_sumqty_p,'###0.##########')+',不能领料:'+String(arg_qty,'###0.##########') // rslt = 0 // Goto ext // End If // End If // //End If //更新mx //按数量分配 DECLARE mtrl_cur_mx CURSOR FOR SELECT case u_mtrldef.scllplan_mode when 0 then u_outware_scllplan_mx.qty else u_outware_scllplan_mx.p_rqqty END , u_outware_scllplan_mx.factscllqty, u_outware_scllplan_mx.orderid, u_outware_scllplan_mx.printid FROM u_outware_scllplan_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx.mtrlid = u_mtrldef.mtrlid WHERE u_outware_scllplan_mx.outwareid = :arg_outwareid AND u_outware_scllplan_mx.mtrlid = :arg_mtrlid AND u_outware_scllplan_mx.status = :arg_status AND u_outware_scllplan_mx.woodcode = :arg_woodcode AND u_outware_scllplan_mx.pcode = :arg_pcode Order By u_outware_scllplan_mx.printid Desc; OPEN mtrl_cur_mx; count = 1 FETCH mtrl_cur_mx INTO :s_scllplan_mx[count].qty,& :s_scllplan_mx[count].factscllqty,& :s_scllplan_mx[count].orderid,& :s_scllplan_mx[count].printid; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 count++ FETCH mtrl_cur_mx INTO :s_scllplan_mx[count].qty,& :s_scllplan_mx[count].factscllqty,& :s_scllplan_mx[count].orderid,& :s_scllplan_mx[count].printid; LOOP count = count - 1 CLOSE mtrl_cur_mx; tem_addqty = arg_qty tmp_addflqty = arg_addflqty IF arg_auditflag = 1 THEN //审核 IF arg_qty > 0 THEN FOR i = 1 To count IF s_scllplan_mx[i].orderid > 0 THEN IF s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty >= tem_addqty THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty tem_addqty = tem_addqty - lde_factscllqty END IF UPDATE u_outware_scllplan_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND orderid = :s_scllplan_mx[i].orderid And printid = :s_scllplan_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //处理分配 IF li_iffp = 1 And li_storagetype = 1 THEN SELECT ordertype,porderid INTO :li_ordertype_zl,:ll_porderid FROM u_order_ml WHERE u_order_ml.scid = :ll_scid And u_order_ml.orderid = :s_scllplan_mx[i].orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询指令单属性失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ordertype_zl = 4 THEN ll_orderid_retrieve = ll_porderid ELSE ll_orderid_retrieve = s_scllplan_mx[i].orderid END IF ll_row = ds_out_assign.Retrieve(ll_scid,arg_mtrlwareid,ll_orderid_retrieve) ds_out_assign.AcceptText() IF ll_row <= 0 THEN ld_sumnotoutqty = 0 ELSE ld_sumnotoutqty = ds_out_assign.Object.sumnotoutqty[1] END IF ld_sumnotoutqty_bill = 0 ld_sumnotoutqty_bill = lde_factscllqty IF ld_sumnotoutqty_bill > ld_sumnotoutqty THEN ARG_MSG = '计划库存分配数不足,请检查库存分配明细' rslt = 0 GOTO ext ELSE ld_assign_outqty = 0 FOR j = 1 To ds_out_assign.RowCount() IF ds_out_assign.Object.notoutqty[j] >= ld_sumnotoutqty_bill THEN ld_assign_outqty = ld_sumnotoutqty_bill IF uo_ma.uof_assign_addoutqty(ds_out_assign.Object.assignid[j],ld_assign_outqty,ARG_MSG,False) = 0 THEN ARG_MSG = '更新库存分配已出数量失败,'+ARG_MSG rslt = 0 GOTO ext END IF EXIT ELSE ld_assign_outqty = ds_out_assign.Object.notoutqty[j] IF uo_ma.uof_assign_addoutqty(ds_out_assign.Object.assignid[j],ld_assign_outqty,ARG_MSG,False) = 0 THEN ARG_MSG = '更新库存分配已出数量失败,'+ARG_MSG rslt = 0 GOTO ext END IF ld_sumnotoutqty_bill = ld_sumnotoutqty_bill - ds_out_assign.Object.notoutqty[j] END IF NEXT END IF END IF ////////////////////////////////////// // IF uo_order.f_add_dstrqty(ll_scid,s_scllplan_mx[i].orderid,ll_relid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& lde_factscllqty,lde_costamt,ARG_MSG,False,0,ld_overqty) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To uo_order.it_mx_rq ins_itmx_aps++ ins_s_rqmtrl.mtrlid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.mtrlid[ll_i] ins_s_rqmtrl.status[ins_itmx_aps] = uo_order.ins_s_rqmtrl.status[ll_i] ins_s_rqmtrl.woodcode[ins_itmx_aps] = uo_order.ins_s_rqmtrl.woodcode[ll_i] ins_s_rqmtrl.pcode[ins_itmx_aps] = uo_order.ins_s_rqmtrl.pcode[ll_i] ins_s_rqmtrl.wrkgrpid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.wrkgrpid[ll_i] ins_s_rqmtrl.orderid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.orderid[ll_i] ins_s_rqmtrl.qty[ins_itmx_aps] = uo_order.ins_s_rqmtrl.qty[ll_i] ins_s_rqmtrl.scid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.scid[ll_i] NEXT IF uof_update_mtrlflag(ll_scid,s_scllplan_mx[i].orderid,ll_relid,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF IF tem_addqty = 0 THEN EXIT END IF NEXT END IF FOR i = count To 1 Step -1 IF tmp_addflqty = 0 THEN EXIT lde_flqty = 0 IF s_scllplan_mx[i].scllplan_mode = 0 THEN IF tmp_addflqty > 0 THEN IF s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty >= tmp_addflqty THEN lde_flqty = tmp_addflqty tmp_addflqty = 0 ELSE lde_flqty = s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty tmp_addflqty = tmp_addflqty - (s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty) END IF END IF END IF //更新领料明细发料通知单数 IF s_scllplan_mx[i].scllplan_mode = 0 THEN IF lde_flqty <> 0 THEN IF uo_order.f_add_flqty(ll_scid,s_scllplan_mx[i].orderid,ll_wrkgrpid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& 0 - lde_flqty,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT // // IF tem_addqty <> 0 THEN // ARG_MSG = '增加实领数大于发料通知单需领数' // rslt = 0 // GOTO ext // END IF ELSE IF tem_addqty < 0 THEN FOR i = 1 To count IF s_scllplan_mx[i].orderid > 0 And s_scllplan_mx[i].factscllqty > 0 THEN IF s_scllplan_mx[i].factscllqty >= Abs(tem_addqty) THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = 0 - s_scllplan_mx[i].factscllqty tem_addqty = tem_addqty - lde_factscllqty END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx SET factscllqty = factscllqty + :lde_factscllqty FROM u_outware_scllplan_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND orderid = :s_scllplan_mx[i].orderid And printid = :s_scllplan_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //处理分配 IF li_iffp = 1 And li_storagetype = 1 THEN SELECT ordertype,porderid INTO :li_ordertype_zl,:ll_porderid FROM u_order_ml WHERE u_order_ml.scid = :ll_scid And u_order_ml.orderid = :s_scllplan_mx[i].orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询指令单属性失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ordertype_zl = 4 THEN ll_orderid_retrieve = ll_porderid ELSE ll_orderid_retrieve = s_scllplan_mx[i].orderid END IF ll_row = ds_out_assign.Retrieve(ll_scid,arg_mtrlwareid,ll_orderid_retrieve) ds_out_assign.AcceptText() IF ll_row <= 0 THEN ld_sumnotoutqty = 0 ELSE ld_sumnotoutqty = ds_out_assign.Object.sumnotoutqty[1] END IF ld_qty_tmp = Abs(lde_factscllqty) IF ld_qty_tmp > ld_sumnotoutqty THEN ARG_MSG = '主计划物料库存分配已出仓数不足,不能撤审,请检查库存分配明细' rslt = 0 GOTO ext ELSE ld_assign_outqty = 0 FOR j = 1 To ds_out_assign.RowCount() IF ds_out_assign.Object.notoutqty[j] >= ld_qty_tmp THEN ld_assign_outqty = ld_qty_tmp IF uo_ma.uof_assign_addoutqty(ds_out_assign.Object.assignid[j],0 - ld_assign_outqty,ARG_MSG,False) = 0 THEN ARG_MSG = '取消更新材料库存分配已出仓数,'+ARG_MSG rslt = 0 GOTO ext END IF EXIT ELSE ld_assign_outqty = ds_out_assign.Object.notoutqty[j] IF uo_ma.uof_assign_addoutqty(ds_out_assign.Object.assignid[j],0 - ld_assign_outqty,ARG_MSG,False) = 0 THEN ARG_MSG = '取消更新材料库存分配已出仓数,'+ARG_MSG rslt = 0 GOTO ext END IF ld_qty_tmp = ld_qty_tmp - ds_out_assign.Object.notoutqty[j] END IF NEXT END IF END IF /////////////////////////////////////// // IF uo_order.f_add_dstrqty(ll_scid,s_scllplan_mx[i].orderid,ll_relid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& lde_factscllqty,lde_costamt,ARG_MSG,False,0,ld_overqty) = 0 THEN rslt = 0 GOTO ext END IF FOR ll_i = 1 To uo_order.it_mx_rq ins_itmx_aps++ ins_s_rqmtrl.mtrlid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.mtrlid[ll_i] ins_s_rqmtrl.status[ins_itmx_aps] = uo_order.ins_s_rqmtrl.status[ll_i] ins_s_rqmtrl.woodcode[ins_itmx_aps] = uo_order.ins_s_rqmtrl.woodcode[ll_i] ins_s_rqmtrl.pcode[ins_itmx_aps] = uo_order.ins_s_rqmtrl.pcode[ll_i] ins_s_rqmtrl.wrkgrpid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.wrkgrpid[ll_i] ins_s_rqmtrl.orderid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.orderid[ll_i] ins_s_rqmtrl.qty[ins_itmx_aps] = uo_order.ins_s_rqmtrl.qty[ll_i] ins_s_rqmtrl.scid[ins_itmx_aps] = uo_order.ins_s_rqmtrl.scid[ll_i] NEXT IF uof_update_mtrlflag(ll_scid,s_scllplan_mx[i].orderid,ll_relid,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT END IF NEXT END IF // IF tem_addqty <> 0 THEN // ARG_MSG = '增加实领数大于发料通知单需领数' // rslt = 0 // GOTO ext // END IF FOR i = count To 1 Step -1 IF tmp_addflqty = 0 THEN EXIT lde_flqty = 0 IF s_scllplan_mx[i].scllplan_mode = 0 THEN IF Abs(tmp_addflqty) > 0 THEN IF Abs(tmp_addflqty) >= s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty THEN lde_flqty = s_scllplan_mx[i].qty - s_scllplan_mx[i].factscllqty tmp_addflqty = tmp_addflqty + lde_flqty ELSE lde_flqty = Abs(tmp_addflqty) tmp_addflqty = 0 END IF END IF END IF //更新领料明细发料通知单数 IF s_scllplan_mx[i].scllplan_mode = 0 THEN IF lde_flqty <> 0 THEN IF uo_order.f_add_flqty(ll_scid,s_scllplan_mx[i].orderid,ll_wrkgrpid,& arg_mtrlid,ls_mtrlcode,& arg_status,arg_woodcode,arg_pcode,& lde_flqty,ARG_MSG,False) = 0 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT END IF //更新mxmx //按数量分配 DECLARE mtrl_cur_mxmx CURSOR FOR SELECT case u_mtrldef.scllplan_mode when 0 then u_outware_scllplan_mx_mx.qty else u_outware_scllplan_mx_mx.p_rqqty END , u_outware_scllplan_mx_mx.factscllqty, u_outware_scllplan_mx_mx.printid, u_outware_scllplan_mx_mx.uqty, u_outware_scllplan_mx_mx.factsclluqty FROM u_outware_scllplan_mx_mx INNER JOIN u_mtrldef ON u_outware_scllplan_mx_mx.mtrlid = u_mtrldef.mtrlid WHERE u_outware_scllplan_mx_mx.outwareid = :arg_outwareid AND u_outware_scllplan_mx_mx.mtrlid = :arg_mtrlid AND u_outware_scllplan_mx_mx.storageid = :arg_storageid AND u_outware_scllplan_mx_mx.status = :arg_status AND u_outware_scllplan_mx_mx.woodcode = :arg_woodcode AND u_outware_scllplan_mx_mx.pcode = :arg_pcode Order By u_outware_scllplan_mx_mx.printid Desc; OPEN mtrl_cur_mxmx; count = 1 FETCH mtrl_cur_mxmx INTO :s_scllplan_mx_mx[count].qty,& :s_scllplan_mx_mx[count].factscllqty,& :s_scllplan_mx_mx[count].printid,& :s_scllplan_mx_mx[count].uqty,& :s_scllplan_mx_mx[count].factsclluqty; DO WHILE sqlca.SQLCode = 0 //循环读取明细数据 count++ FETCH mtrl_cur_mxmx INTO :s_scllplan_mx_mx[count].qty,& :s_scllplan_mx_mx[count].factscllqty,& :s_scllplan_mx_mx[count].printid,& :s_scllplan_mx_mx[count].uqty,& :s_scllplan_mx_mx[count].factsclluqty; LOOP count = count - 1 CLOSE mtrl_cur_mxmx; tem_addqty = arg_qty tem_adduqty = arg_uqty IF arg_qty > 0 THEN FOR i = 1 To count IF s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty > 0 THEN IF s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty >= tem_addqty THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty tem_addqty = tem_addqty - (s_scllplan_mx_mx[i].qty - s_scllplan_mx_mx[i].factscllqty) END IF IF s_scllplan_mx_mx[i].uqty - s_scllplan_mx_mx[i].factsclluqty >= tem_adduqty THEN lde_factsclluqty = tem_adduqty tem_adduqty = 0 ELSE lde_factsclluqty = s_scllplan_mx_mx[i].uqty - s_scllplan_mx_mx[i].factsclluqty tem_adduqty = tem_adduqty - (s_scllplan_mx_mx[i].uqty - s_scllplan_mx_mx[i].factsclluqty) END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx_mx SET factscllqty = factscllqty + :lde_factscllqty, factsclluqty = factsclluqty + :lde_factsclluqty FROM u_outware_scllplan_mx_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND storageid = :arg_storageid And printid = :s_scllplan_mx_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT END IF NEXT // IF tem_addqty <> 0 THEN // ARG_MSG = '增加实领数大于发料通知单需领数' // rslt = 0 // GOTO ext // END IF // arg_overqty = tem_addqty ELSE FOR i = 1 To count IF s_scllplan_mx_mx[i].factscllqty >= Abs(tem_addqty) THEN lde_factscllqty = tem_addqty tem_addqty = 0 ELSE lde_factscllqty = 0 - s_scllplan_mx_mx[i].factscllqty tem_addqty = tem_addqty + s_scllplan_mx_mx[i].factscllqty END IF IF s_scllplan_mx_mx[i].factsclluqty >= Abs(tem_adduqty) THEN lde_factsclluqty = tem_adduqty tem_adduqty = 0 ELSE lde_factsclluqty = 0 - s_scllplan_mx_mx[i].factsclluqty tem_adduqty = tem_adduqty + s_scllplan_mx_mx[i].factsclluqty END IF IF lde_factscllqty <> 0 THEN UPDATE u_outware_scllplan_mx_mx SET factscllqty = factscllqty + :lde_factscllqty, factsclluqty = factsclluqty + :lde_factsclluqty FROM u_outware_scllplan_mx_mx WHERE outwareid = :arg_outwareid AND mtrlid = :arg_mtrlid AND storageid = :arg_storageid And printid = :s_scllplan_mx_mx[i].printid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '更新实际领料数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF IF tem_addqty = 0 THEN EXIT NEXT // IF tem_addqty <> 0 THEN // ARG_MSG = '增加实领数大于发料通知单需领数' // rslt = 0 // GOTO ext // END IF arg_overqty = tem_addqty END IF ext: Destroy uo_order Destroy uo_ma Destroy ds_out_assign RETURN rslt end function on uo_outware_scllplan.create call super::create TriggerEvent( this, "constructor" ) end on on uo_outware_scllplan.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('248',str_optionvalue,arg_msg) uo_option_scllplan_outware_auto = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('405',str_optionvalue,arg_msg) uo_option_scllplan_noscllmx = Long(str_optionvalue) end event