123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661 |
- $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
|