$PBExportHeader$uo_cmpl_packpro.sru forward global type uo_cmpl_packpro from nonvisualobject end type end forward global type uo_cmpl_packpro from nonvisualobject end type global uo_cmpl_packpro uo_cmpl_packpro type variables Transaction commit_transaction //数据commit事务 end variables forward prototypes public function integer uof_cmpl (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref string arg_msg) public function integer uof_ref_mtrlwarid_array (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref s_cmplpackpro_ref_mtrlwareid_array s_ref_mtrlwareid_array, ref string arg_msg) public function integer uof_cmpl_diqty (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg) public function integer uof_cmpl_diqty_commit (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg) public function integer uof_update_canuseqty (long arg_scid, long arg_mtrlwareid, decimal arg_qty, decimal arg_pack_min_nofpqty, decimal arg_noauditingqty_ifpackpro, decimal arg_canpackqty_fp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_fpqty (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_fpqty_out (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_outqty, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer uof_cmpl (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref string arg_msg);Int rslt = 1 s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst IF uof_ref_mtrlwarid_array(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_ref_mtrlwarid_array (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref s_cmplpackpro_ref_mtrlwareid_array s_ref_mtrlwareid_array, ref string arg_msg);Int rslt = 1 Long ll_i,ll_rowcnt,ll_array,ll_j Int li_ifpackpro datastore ds_cmpl_packpro ds_cmpl_packpro = Create datastore Select ifpackpro Into :li_ifpackpro From u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction; If sqlca.SQLCode <> 0 Then arg_msg = '查询物料是否包件产品失败,'+commit_transaction.SQLErrText rslt = 0 Goto ext End If If li_ifpackpro = 3 Or li_ifpackpro = 4 Then ds_cmpl_packpro.DataObject = 'ds_mtrlware_auto_cmpl_packpro2' Else ds_cmpl_packpro.DataObject = 'ds_mtrlware_auto_cmpl_packpro' End If ll_array = UpperBound(s_ref_mtrlwareid_array.mtrlwareid) If ll_array = 0 Then s_ref_mtrlwareid_array.scid[1] = 0 s_ref_mtrlwareid_array.mtrlwareid[1] = 0 s_ref_mtrlwareid_array.storageid[1] = 0 s_ref_mtrlwareid_array.mtrlid[1] = 0 s_ref_mtrlwareid_array.status[1] = '' s_ref_mtrlwareid_array.woodcode[1] = '' s_ref_mtrlwareid_array.pcode[1] = '' s_ref_mtrlwareid_array.plancode[1] = '' s_ref_mtrlwareid_array.mtrlcuscode[1] = '' s_ref_mtrlwareid_array.cmpl_ifpackpro[1] = 0 End If ds_cmpl_packpro.SetTransObject(commit_transaction) ll_rowcnt = ds_cmpl_packpro.Retrieve(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid) For ll_i = 1 To ll_rowcnt For ll_j = 1 To UpperBound(s_ref_mtrlwareid_array.mtrlwareid) If ds_cmpl_packpro.Object.u_mtrlware_scid[ll_i] = s_ref_mtrlwareid_array.scid[ll_j] And & ds_cmpl_packpro.Object.u_mtrlware_mtrlwareid[ll_i] = s_ref_mtrlwareid_array.mtrlwareid[ll_j] Then Goto _next End If Next ll_array++ s_ref_mtrlwareid_array.scid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_scid[ll_i] s_ref_mtrlwareid_array.mtrlwareid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_mtrlwareid[ll_i] s_ref_mtrlwareid_array.mtrlid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_mtrlid[ll_i] s_ref_mtrlwareid_array.storageid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_storageid[ll_i] s_ref_mtrlwareid_array.status[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_status[ll_i]) s_ref_mtrlwareid_array.woodcode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_woodcode[ll_i]) s_ref_mtrlwareid_array.pcode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_pcode[ll_i]) s_ref_mtrlwareid_array.plancode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_plancode[ll_i]) s_ref_mtrlwareid_array.mtrlcuscode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_mtrlcuscode[ll_i]) s_ref_mtrlwareid_array.cmpl_ifpackpro[ll_array] = li_ifpackpro _next: Next ext: Destroy ds_cmpl_packpro Return rslt end function public function integer uof_cmpl_diqty (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg);Int rslt = 1 Long ll_i,ll_rowcnt Long ll_scid,ll_mtrlwareid,ll_mtrlid,ll_storageid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp String arg_lsg Int li_ifpackpro ll_rowcnt = UpperBound(arg_s_mtrlwareid_array_rst.mtrlwareid) FOR ll_i = 1 To ll_rowcnt ll_scid = arg_s_mtrlwareid_array_rst.scid[ll_i] ll_mtrlwareid = arg_s_mtrlwareid_array_rst.mtrlwareid[ll_i] ll_mtrlid = arg_s_mtrlwareid_array_rst.mtrlid[ll_i] ll_storageid = arg_s_mtrlwareid_array_rst.storageid[ll_i] ls_status = Trim(arg_s_mtrlwareid_array_rst.status[ll_i]) ls_woodcode = Trim(arg_s_mtrlwareid_array_rst.woodcode[ll_i]) ls_pcode = Trim(arg_s_mtrlwareid_array_rst.pcode[ll_i]) ls_plancode = Trim(arg_s_mtrlwareid_array_rst.plancode[ll_i]) ls_mtrlcuscode = Trim(arg_s_mtrlwareid_array_rst.mtrlcuscode[ll_i]) li_ifpackpro = arg_s_mtrlwareid_array_rst.cmpl_ifpackpro[ll_i] IF ll_mtrlwareid = 0 THEN CONTINUE ld_ref_qty = 0 ld_ref_pack_min_nofpqty = 0 ld_ref_noauditingqty_ifpackpro = 0 IF li_ifpackpro = 4 And Pos(ls_status,'+') = 0 And Pos(ls_status,'*') = 0 THEN ld_ref_qty = 0 ld_ref_pack_min_nofpqty = 0 ld_ref_noauditingqty_ifpackpro = 0 ELSE IF f_cmp_di_qty_fpqty(ll_mtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uof_update_canuseqty(ll_scid,ll_mtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; END IF RETURN rslt end function public function integer uof_cmpl_diqty_commit (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg);Int rslt = 1 Long ll_i,ll_rowcnt Long ll_scid,ll_mtrlwareid,ll_mtrlid,ll_storageid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp String arg_lsg Int li_ifpackpro ll_rowcnt = UpperBound(arg_s_mtrlwareid_array_rst.mtrlwareid) For ll_i = 1 To ll_rowcnt ll_scid = arg_s_mtrlwareid_array_rst.scid[ll_i] ll_mtrlwareid = arg_s_mtrlwareid_array_rst.mtrlwareid[ll_i] ll_mtrlid = arg_s_mtrlwareid_array_rst.mtrlid[ll_i] ll_storageid = arg_s_mtrlwareid_array_rst.storageid[ll_i] ls_status = Trim(arg_s_mtrlwareid_array_rst.status[ll_i]) ls_woodcode = Trim(arg_s_mtrlwareid_array_rst.woodcode[ll_i]) ls_pcode = Trim(arg_s_mtrlwareid_array_rst.pcode[ll_i]) ls_plancode = Trim(arg_s_mtrlwareid_array_rst.plancode[ll_i]) ls_mtrlcuscode = Trim(arg_s_mtrlwareid_array_rst.mtrlcuscode[ll_i]) li_ifpackpro = arg_s_mtrlwareid_array_rst.cmpl_ifpackpro[ll_i] If ll_mtrlwareid = 0 Then Continue ld_ref_qty = 0 ld_ref_pack_min_nofpqty = 0 ld_ref_noauditingqty_ifpackpro = 0 If li_ifpackpro = 4 And Pos(ls_status,'+') = 0 And Pos(ls_status,'*') = 0 Then ld_ref_qty = 0 ld_ref_pack_min_nofpqty = 0 ld_ref_noauditingqty_ifpackpro = 0 Else If f_cmp_di_qty_fpqty(ll_mtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then Rollback Using commit_transaction; Continue End If End If If uof_update_canuseqty(ll_scid,ll_mtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,True) = 0 Then Continue End If Next Return rslt end function public function integer uof_update_canuseqty (long arg_scid, long arg_mtrlwareid, decimal arg_qty, decimal arg_pack_min_nofpqty, decimal arg_noauditingqty_ifpackpro, decimal arg_canpackqty_fp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_mtrlware SET u_mtrlware.canuseqty = :arg_qty, u_mtrlware.pack_min_nofpqty = :arg_pack_min_nofpqty, u_mtrlware.canuseqty_noauditingqty = :arg_noauditingqty_ifpackpro, u_mtrlware.canpackqty_fp = :arg_canpackqty_fp WHERE u_mtrlware.scid = :arg_scid AND u_mtrlware.mtrlwareid = :arg_mtrlwareid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '更新库存参考数失败,可装数:'+string(arg_qty,'#,#0.##########')+',未开单可装数:'+string(arg_noauditingqty_ifpackpro,'#,#0.##########')+',未分配可装数:'+string(arg_pack_min_nofpqty,'#,#0.##########')+','+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: 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 uof_add_fpqty (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp Long ll_storageid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,arg_lsg Long ll_cnt Decimal ld_nopackqty_fp,ld_tmpqty_fp,ld_packqty_fp Long ll_cpmtrlwareid_arr[],ll_cpmtrlid_arr[] Decimal ld_qty_update_arr[] Long it_mxbt = 0,ll_i Int li_if_loop = 0 //是否要扣减其他分配占用的标记 Decimal ld_packqty_fp_upadte = 0,ld_outwareqty datastore ds_fp ds_fp = Create datastore ds_fp.DataObject = 'ds_mtrlware_pack_fp' ds_fp.SetTransObject(sqlca) //arg_qty 为负数即为取消(因为修改功能暂时屏蔽 2015-03-12) //如果是取消分配占用数,检查发货单包件明细是否已用到相关占用,如果已开单,不能取消占用 If arg_qty < 0 And arg_cpmtrlwareid > 0 Then Select SUM(Case u_outwaremx_mx.qty WHEN 0 Then u_outwaremx_mx.planqty Else u_outwaremx_mx.qty End) Into :ld_outwareqty From u_outwaremx_mx Inner JOIN u_outwaremx On u_outwaremx_mx.outwareid = u_outwaremx.outwareid And u_outwaremx_mx.scid = u_outwaremx.scid And u_outwaremx_mx.printid = u_outwaremx.printid Inner JOIN u_outware On u_outwaremx.scid = u_outware.scid And u_outwaremx.outwareid = u_outware.outwareid Where (u_outware.flag = 0) And u_outwaremx_mx.mtrlwareid = :arg_mtrlwareid And u_outwaremx.mtrlwareid = :arg_cpmtrlwareid And u_outwaremx_mx.scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询是否有相关发货单使用到该包件失败,'+commit_transaction.SQLErrText Goto ext End If If IsNull(ld_outwareqty) Then ld_outwareqty = 0 End If //如果是减数量(进仓单撤审),检查原先生成的分配是否够数量扣减,否则循环扣减其他分配数量 If arg_qty < 0 Then Select u_mtrlware.noallocqty - u_mtrlware.packqty_fp Into :ld_nopackqty_fp From u_mtrlware Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询通用包件库存未分配数占用数失败,'+commit_transaction.SQLErrText Goto ext End If If arg_cpmtrlwareid > 0 Then //如果指定要招减对应分配(生产进仓单撤审) Select qty - outqty Into :ld_packqty_fp From u_mtrlware_pack_fp Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction; If commit_transaction.SQLCode = -1 Then rslt = 0 arg_msg = '查询对应分配占用明细信息失败,'+commit_transaction.SQLErrText Goto ext End If If IsNull(ld_packqty_fp) Then ld_packqty_fp = 0 Select SUM(Case u_outwaremx_mx.qty WHEN 0 Then u_outwaremx_mx.planqty Else u_outwaremx_mx.qty End) Into :ld_outwareqty From u_outwaremx_mx Inner JOIN u_outwaremx On u_outwaremx_mx.outwareid = u_outwaremx.outwareid And u_outwaremx_mx.scid = u_outwaremx.scid And u_outwaremx_mx.printid = u_outwaremx.printid Inner JOIN u_outware On u_outwaremx.scid = u_outware.scid And u_outwaremx.outwareid = u_outware.outwareid Where (u_outware.flag = 0) And u_outwaremx_mx.mtrlwareid = :arg_mtrlwareid And u_outwaremx.mtrlwareid = :arg_cpmtrlwareid And u_outwaremx_mx.scid = :arg_scid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询是否有相关发货单使用到该包件失败,'+commit_transaction.SQLErrText Goto ext End If If IsNull(ld_outwareqty) Then ld_outwareqty = 0 If ld_packqty_fp + arg_qty - ld_outwareqty < 0 Then rslt = 0 arg_msg = '可取消分配数:'+String(ld_packqty_fp,'#,##0.##########')+',已开单未审数:'+String(ld_outwareqty,'#,##0.##########')+',不能取消:'+String(0 - arg_qty,'#,##0.##########') Goto ext End If If ld_packqty_fp > 0 Then it_mxbt++ ll_cpmtrlwareid_arr[it_mxbt] = arg_cpmtrlwareid ll_cpmtrlid_arr[it_mxbt] = arg_cpmtrlid If ld_packqty_fp + arg_qty > 0 Then ld_qty_update_arr[it_mxbt] = arg_qty Else ld_qty_update_arr[it_mxbt] = 0 - ld_packqty_fp End If End If If ld_packqty_fp + ld_nopackqty_fp + arg_qty < 0 Then //如果未分配数不够扣减多出数量,则需要减其余分配数量 ld_tmpqty_fp = ld_packqty_fp + ld_nopackqty_fp + arg_qty li_if_loop = 1 End If Else //不指定(其余进仓单明细是通用包件撤审) //先找通用包件未分配数是否足够扣减,如果足够,则不减分配明细,如果不够,多出数量循环扣减其他分配数量 If ld_nopackqty_fp + arg_qty >= 0 Then rslt = 1 Goto ext Else ld_tmpqty_fp = ld_nopackqty_fp + arg_qty li_if_loop = 1 End If End If //需要扣减其他分配占用数量的情况 If li_if_loop = 1 Then ds_fp.Retrieve(arg_scid,arg_mtrlwareid) For ll_i = 1 To ds_fp.RowCount() it_mxbt++ ll_cpmtrlwareid_arr[it_mxbt] = ds_fp.Object.cpmtrlwareid[ll_i] ll_cpmtrlid_arr[it_mxbt] = ds_fp.Object.cpmtrlid[ll_i] If ld_tmpqty_fp + ds_fp.Object.notoutqty[ll_i] > 0 Then //分配明细数量够减 ld_qty_update_arr[it_mxbt] = ld_tmpqty_fp ld_tmpqty_fp = 0 Else ld_qty_update_arr[it_mxbt] = 0 - ds_fp.Object.notoutqty[ll_i] ld_tmpqty_fp = ld_tmpqty_fp + ds_fp.Object.notoutqty[ll_i] End If If ld_tmpqty_fp >= 0 Then Exit Next End If Else it_mxbt++ ll_cpmtrlwareid_arr[it_mxbt] = arg_cpmtrlwareid ll_cpmtrlid_arr[it_mxbt] = arg_cpmtrlid ld_qty_update_arr[it_mxbt] = arg_qty End If For ll_i = 1 To it_mxbt Update u_mtrlware_pack_fp Set qty = qty + :ld_qty_update_arr[ll_i], opdate = getdate(), opemp = :publ_operator Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid And cpmtrlwareid = :ll_cpmtrlwareid_arr[ll_i] Using commit_transaction; If commit_transaction.SQLCode = 0 Then If commit_transaction.SQLNRows = 0 Then If arg_qty > 0 Then Insert Into u_mtrlware_pack_fp (scid, mtrlwareid, mtrlid, cpmtrlwareid, cpmtrlid, qty, opdate, opemp) Values (:arg_scid, :arg_mtrlwareid, :arg_mtrlid, :ll_cpmtrlwareid_arr[ll_i], :ll_cpmtrlid_arr[ll_i], :ld_qty_update_arr[ll_i], getdate(), :publ_operator) Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '插入包件占用记录失败,'+commit_transaction.SQLErrText Goto ext End If End If End If Else rslt = 0 arg_msg = '更新包件占用记录失败,'+commit_transaction.SQLErrText Goto ext End If //如果qty= 0,删除该行记录 Delete From u_mtrlware_pack_fp Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid And cpmtrlwareid = :ll_cpmtrlwareid_arr[ll_i] And qty <= 0 Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '删除包件占用记录失败,'+commit_transaction.SQLErrText Goto ext End If //计算通用包件产品的占用可装数并更新 Select storageid,status,woodcode,pcode,plancode,mtrlcuscode Into :ll_storageid,:ls_status,:ls_woodcode,:ls_pcode,:ls_plancode,:ls_mtrlcuscode From u_mtrlware Where scid = :arg_scid And mtrlwareid = :ll_cpmtrlwareid_arr[ll_i] Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询包件产品库存信息失败,'+commit_transaction.SQLErrText Goto ext End If If f_cmp_di_qty_fpqty(ll_cpmtrlid_arr[ll_i],ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then rslt = 0 Goto ext End If If uof_update_canuseqty(arg_scid,ll_cpmtrlwareid_arr[ll_i],ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 Then rslt = 0 Goto ext End If ld_packqty_fp_upadte = ld_packqty_fp_upadte + ld_qty_update_arr[ll_i] Next //更新包件库存的产品已占用数 Update u_mtrlware Set packqty_fp = case when packqty_fp + :ld_packqty_fp_upadte < 0 then 0 else packqty_fp + :ld_packqty_fp_upadte End Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新包件库存的产品已占用数失败,'+commit_transaction.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback Using commit_transaction; ElseIf rslt = 1 And arg_ifcommit Then Commit Using commit_transaction; End If Destroy ds_fp Return rslt end function public function integer uof_add_fpqty_out (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_outqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp Long ll_storageid String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,arg_lsg Decimal ld_qty,ld_outqty_ori Select qty,outqty Into :ld_qty,:ld_outqty_ori From u_mtrlware_pack_fp Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询包件占用记录失败,'+commit_transaction.SQLErrText Goto ext End If if ld_outqty_ori + arg_outqty > ld_qty then rslt = 0 arg_msg = '包件占用记录数量:'+string(ld_qty,'#,##0.##########')+',已出仓数:'+string(ld_outqty_ori,'#,##0.##########')+',不能再出仓:'+string(arg_outqty,'#,##0.##########') goto ext end if Update u_mtrlware_pack_fp Set outqty = outqty + :arg_outqty Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新包件占用记录失败,'+commit_transaction.SQLErrText Goto ext End If //计算通用包件产品的占用可装数并更新 Select storageid,status,woodcode,pcode,plancode,mtrlcuscode Into :ll_storageid,:ls_status,:ls_woodcode,:ls_pcode,:ls_plancode,:ls_mtrlcuscode From u_mtrlware Where scid = :arg_scid And mtrlwareid = :arg_cpmtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '查询包件产品库存信息失败,'+commit_transaction.SQLErrText Goto ext End If If f_cmp_di_qty_fpqty(arg_cpmtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then rslt = 0 Goto ext End If If uof_update_canuseqty(arg_scid,arg_cpmtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 Then rslt = 0 Goto ext End If //更新包件库存的产品已占用数 Update u_mtrlware Set packqty_fp = packqty_fp - :arg_outqty Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid Using commit_transaction; If commit_transaction.SQLCode <> 0 Then rslt = 0 arg_msg = '更新包件库存的产品已占用数失败,'+commit_transaction.SQLErrText Goto ext End If ext: 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 on uo_cmpl_packpro.create call super::create TriggerEvent( this, "constructor" ) end on on uo_cmpl_packpro.destroy TriggerEvent( this, "destructor" ) call super::destroy end on