$PBExportHeader$f_update_mtrlware_spt_in.srf global type f_update_mtrlware_spt_in from function_object end type forward prototypes global function integer f_update_mtrlware_spt_in (integer arg_billtype, integer arg_thflag, long arg_scid, long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_price, long arg_sptid, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit, transaction arg_transaction) end prototypes global function integer f_update_mtrlware_spt_in (integer arg_billtype, integer arg_thflag, long arg_scid, long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_price, long arg_sptid, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit, transaction arg_transaction);Int rslt = 1 Long ls_newid String or_err_part Decimal ld_cost Decimal ld_balcqty,ld_balcamt Decimal ld_outqty,ld_outamt Decimal ld_reoutqty,ld_reoutamt Decimal ld_pypkqty,ld_pypkamt Decimal ld_wasteqty,ld_wasteamt //-------------------------------------------更新库存 IF sys_option_wfjgware_nocost = 0 THEN UPDATE ow_wfjgware SET noallocqty = noallocqty - :arg_qty , wareamt = case noallocqty - :arg_qty when 0 then 0 else wareamt - round(:arg_qty * :arg_price,2) END , waredate = getdate(), newprice = :arg_price, cost = case noallocqty - :arg_qty when 0 then cost else round( (wareamt - round(:arg_qty * :arg_price,2)) /(noallocqty - :arg_qty),:sys_option_cost_dec) END Where ( mtrlwareid = :arg_mtrlwareid ) USING arg_transaction ; IF arg_transaction.SQLCode = 0 THEN IF arg_transaction.SQLNRows = 0 THEN ///////////////////////// // ls_newid = f_sys_scidentity(0,"ow_wfjgware","mtrlwareid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF ///////////////////////// // ld_cost = Round(arg_price,sys_option_cost_dec) INSERT INTO ow_wfjgware (mtrlwareid, mtrlid, plancode, status, noallocqty, allocqty, wareamt, sptid, woodcode, pcode, cost, scid) VALUES ( :ls_newid, :arg_mtrlid, :arg_plancode, :arg_status, :arg_qty, 0, round(:arg_price * :arg_qty,2), :arg_sptid, :arg_woodcode, :arg_pcode, :ld_cost, :arg_scid) USING arg_transaction ; IF arg_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协商库存,物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+arg_transaction.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' IF arg_transaction.SQLCode = 513 OR Pos(Lower(arg_transaction.SQLErrText),or_err_part) > 0 OR Pos(Lower(arg_transaction.SQLErrText),'noallocqty') > 0 THEN arg_msg = "外协商库存,物料["+arg_mtrlcode+"]没有足够的库存支持冲减" ELSEIF Pos(Lower(arg_transaction.SQLErrText),'cost') > 0 or Pos(Lower(arg_transaction.SQLErrText),'wareamt') > 0 THEN arg_msg = "外协商库存,物料["+arg_mtrlcode+"]没有足够的库存金额支持冲减" ELSE arg_msg = "外协商库存,物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+arg_transaction.SQLErrText END IF GOTO ext END IF //-----------------------------------更新结存 ld_balcqty = arg_qty ld_balcamt = Round(arg_qty * arg_price,2) CHOOSE CASE arg_billtype CASE 4,5 IF arg_thflag = 0 THEN ld_outqty = arg_qty ld_outamt = Round(arg_qty * arg_price,2) ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = 0 ld_wasteamt = 0 ELSE ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 - arg_qty ld_reoutamt = 0 - Round(arg_qty * arg_price,2) ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = 0 ld_wasteamt = 0 END IF CASE 9 ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 - arg_qty ld_pypkamt = 0 - Round(arg_qty * arg_price,2) ld_wasteqty = 0 ld_wasteamt = 0 CASE 10 ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = arg_qty ld_wasteamt = Round(arg_qty * arg_price,2) END CHOOSE UPDATE ow_wfjgbalc SET outqty = outqty + :ld_outqty , outamt = outamt + :ld_outamt, reoutqty = reoutqty + :ld_reoutqty , reoutamt = reoutamt + :ld_reoutamt, balcqty = balcqty - :ld_balcqty, balcamt = case balcqty - :ld_balcqty when 0 then 0 else balcamt - :ld_balcamt END , pypkqty = pypkqty + :ld_pypkqty, pypkamt = pypkamt + :ld_pypkamt, wasteqty = wasteqty + :ld_wasteqty, wasteamt = wasteamt + :ld_wasteamt WHERE ( mtrlid = :arg_mtrlid ) AND ( sptid = :arg_sptid ) AND ( balcdateint = 0) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode ) AND ( pcode = :arg_pcode ) AND ( scid = :arg_scid ) USING arg_transaction ; IF arg_transaction.SQLCode = 0 THEN IF arg_transaction.SQLNRows = 0 THEN INSERT INTO ow_wfjgbalc ( balcdateint, mtrlid, sptid, bgqty, bgamt, inqty, inamt, outqty, outamt, reoutqty, reoutamt, thqty, thamt, balcqty, balcamt, status, woodcode, pcode, pypkqty, pypkamt, wasteqty, wasteamt, scid) VALUES ( 0, :arg_mtrlid, :arg_sptid, 0, 0, 0, 0, :ld_outqty, :ld_outamt, :ld_reoutqty, :ld_reoutamt, 0, 0, 0 - :ld_balcqty, 0 - :ld_balcamt, :arg_status, :arg_woodcode, :arg_pcode, :ld_pypkqty, :ld_pypkamt, :ld_wasteqty, :ld_wasteamt, :arg_scid) USING arg_transaction ; IF arg_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协商库存物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+arg_transaction.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' IF arg_transaction.SQLCode = 513 OR Pos(Lower(arg_transaction.SQLErrText),or_err_part) > 0 THEN arg_msg = "外协商库存物料["+arg_mtrlcode+"]没有足够的结存支持冲减" ELSE arg_msg = "外协商库存物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+arg_transaction.SQLErrText END IF GOTO ext END IF ELSE UPDATE ow_wfjgware SET noallocqty = noallocqty - :arg_qty , wareamt = 0 , waredate = getdate(), newprice = 0, cost = 0 Where ( mtrlwareid = :arg_mtrlwareid ) USING arg_transaction ; IF arg_transaction.SQLCode = 0 THEN IF arg_transaction.SQLNRows = 0 THEN ///////////////////////// // ls_newid = f_sys_scidentity(0,"ow_wfjgware","mtrlwareid",arg_msg,TRUE,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF ///////////////////////// // ld_cost = Round(arg_price,sys_option_cost_dec) INSERT INTO ow_wfjgware (mtrlwareid, mtrlid, plancode, status, noallocqty, allocqty, wareamt, sptid, woodcode, pcode, cost, scid) VALUES ( :ls_newid, :arg_mtrlid, :arg_plancode, :arg_status, :arg_qty, 0, 0, :arg_sptid, :arg_woodcode, :arg_pcode, 0, :arg_scid) USING arg_transaction ; IF arg_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协商库存物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+arg_transaction.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' IF arg_transaction.SQLCode = 513 OR Pos(Lower(arg_transaction.SQLErrText),or_err_part) > 0 OR Pos(Lower(arg_transaction.SQLErrText),'noallocqty') > 0 THEN arg_msg = "外协商库存,物料["+arg_mtrlcode+"]没有足够的库存支持冲减" ELSEIF Pos(Lower(arg_transaction.SQLErrText),'cost') > 0 or Pos(Lower(arg_transaction.SQLErrText),'wareamt') > 0 THEN arg_msg = "外协商库存,物料["+arg_mtrlcode+"]没有足够的库存金额支持冲减" ELSE arg_msg = "外协商库存物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+arg_transaction.SQLErrText END IF GOTO ext END IF //-----------------------------------更新结存 ld_balcqty = arg_qty ld_balcamt = 0 CHOOSE CASE arg_billtype CASE 4,5 IF arg_thflag = 0 THEN ld_outqty = arg_qty ld_outamt = 0 ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = 0 ld_wasteamt = 0 ELSE ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 - arg_qty ld_reoutamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = 0 ld_wasteamt = 0 END IF CASE 9 ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 - arg_qty ld_pypkamt = 0 ld_wasteqty = 0 ld_wasteamt = 0 CASE 10 ld_outqty = 0 ld_outamt = 0 ld_reoutqty = 0 ld_reoutamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ld_wasteqty = arg_qty ld_wasteamt = 0 END CHOOSE UPDATE ow_wfjgbalc SET outqty = outqty + :ld_outqty , outamt = 0, reoutqty = reoutqty + :ld_reoutqty , reoutamt = 0, balcqty = balcqty - :ld_balcqty, balcamt = 0, pypkqty = pypkqty + :ld_pypkqty, pypkamt = 0, wasteqty = wasteqty + :ld_wasteqty, wasteamt = 0 WHERE ( mtrlid = :arg_mtrlid ) AND ( sptid = :arg_sptid ) AND ( balcdateint = 0) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode ) AND ( pcode = :arg_pcode ) AND ( scid = :arg_scid ) USING arg_transaction ; IF arg_transaction.SQLCode = 0 THEN IF arg_transaction.SQLNRows = 0 THEN INSERT INTO ow_wfjgbalc ( balcdateint, mtrlid, sptid, bgqty, bgamt, inqty, inamt, outqty, outamt, reoutqty, reoutamt, thqty, thamt, balcqty, balcamt, status, woodcode, pcode, pypkqty, pypkamt, wasteqty, wasteamt, scid) VALUES ( 0, :arg_mtrlid, :arg_sptid, 0, 0, 0, 0, :ld_outqty, 0, :ld_reoutqty, 0, 0, 0, 0 - :ld_balcqty, 0, :arg_status, :arg_woodcode, :arg_pcode, :ld_pypkqty, 0, :ld_wasteqty, 0, :arg_scid) USING arg_transaction ; IF arg_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "外协商库存物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+arg_transaction.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement' IF arg_transaction.SQLCode = 513 OR Pos(Lower(arg_transaction.SQLErrText),or_err_part) > 0 THEN arg_msg = "外协商库存物料["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减" ELSE arg_msg = "外协商库存物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+arg_transaction.SQLErrText END IF GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING arg_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING arg_transaction; END IF RETURN rslt end function