$PBExportHeader$f_update_mtrlware_spt_out.srf global type f_update_mtrlware_spt_out from function_object end type forward prototypes global function integer f_update_mtrlware_spt_out (integer arg_billtype, integer arg_thflag, long arg_scid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_costamt, decimal arg_planprice, 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_out (integer arg_billtype, integer arg_thflag, long arg_scid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_costamt, decimal arg_planprice, 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 Decimal ld_cost String or_err_part Decimal ld_thqty,ld_thamt Decimal ld_inqty,ld_inamt Decimal ld_balcqty,ld_balcamt Decimal ld_pypkqty,ld_pypkamt 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 + :arg_costamt END , cost = case noallocqty + :arg_qty when 0 then cost else round((wareamt + :arg_costamt)/(noallocqty + :arg_qty),:sys_option_cost_dec) END , waredate = getdate() WHERE ( mtrlid = :arg_mtrlid ) AND (status = :arg_Status) AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plancode = :arg_plancode AND sptid = :arg_sptid AND scid = :arg_scid 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,FALSE,arg_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF ld_cost = Round(arg_costamt/arg_qty,sys_option_cost_dec) INSERT INTO ow_wfjgware (mtrlwareid, mtrlid, plancode, status, noallocqty, allocqty, wareamt, planprice, sptid, woodcode, pcode, cost, scid) VALUES ( :ls_newid, :arg_mtrlid, :arg_plancode, :arg_status, :arg_qty, 0, :arg_costamt, :arg_planprice, :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 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 = arg_costamt CHOOSE CASE arg_billtype CASE 4,5 IF arg_thflag = 0 THEN ld_inqty = arg_qty ld_inamt = arg_costamt ld_thqty = 0 ld_thamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ELSE ld_inqty = 0 ld_inamt = 0 ld_thqty = 0 - arg_qty ld_thamt = 0 - arg_costamt ld_pypkqty = 0 ld_pypkamt = 0 END IF CASE 9 ld_inqty = 0 ld_inamt = 0 ld_thqty = 0 ld_thamt = 0 ld_pypkqty = 0 + arg_qty ld_pypkamt = 0 + arg_costamt END CHOOSE UPDATE ow_wfjgbalc SET balcqty = balcqty + :ld_balcqty, balcamt = case balcqty + :ld_balcqty when 0 then 0 else balcamt + :ld_balcamt END , inqty = inqty + :ld_inqty, inamt = inamt + :ld_inamt, thqty = thqty + :ld_thqty, thamt = thamt + :ld_thamt, pypkqty = pypkqty + :ld_pypkqty, pypkamt = pypkamt + :ld_pypkamt WHERE ( mtrlid = :arg_mtrlid ) AND ( balcdateint = 0 ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode ) AND ( sptid = :arg_sptid ) 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, sptid, mtrlid, status, woodcode, pcode, thqty, thamt, inqty, inamt, balcqty, balcamt, pypkqty, pypkamt, scid) VALUES (0, :arg_sptid, :arg_mtrlid, :arg_status, :arg_woodcode, :arg_pcode, :ld_thqty, :ld_thamt, :ld_inqty, :ld_inamt, :ld_balcqty, :ld_balcamt, :ld_pypkqty, :ld_pypkamt, :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 , cost = 0 , waredate = getdate() WHERE ( mtrlid = :arg_mtrlid ) AND (status = :arg_Status) AND woodcode = :arg_woodcode AND pcode = :arg_pcode AND plancode = :arg_plancode AND sptid = :arg_sptid AND scid = :arg_scid 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,FALSE,arg_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO ow_wfjgware (mtrlwareid, mtrlid, plancode, status, noallocqty, allocqty, wareamt, planprice, sptid, woodcode, pcode, cost, scid) VALUES ( :ls_newid, :arg_mtrlid, :arg_plancode, :arg_status, :arg_qty, 0, 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 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 = arg_costamt CHOOSE CASE arg_billtype CASE 4,5 IF arg_thflag = 0 THEN ld_inqty = arg_qty ld_inamt = 0 ld_thqty = 0 ld_thamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 ELSE ld_inqty = 0 ld_inamt = 0 ld_thqty = 0 - arg_qty ld_thamt = 0 ld_pypkqty = 0 ld_pypkamt = 0 END IF CASE 9 ld_inqty = 0 ld_inamt = 0 ld_thqty = 0 ld_thamt = 0 ld_pypkqty = 0 + arg_qty ld_pypkamt = 0 END CHOOSE UPDATE ow_wfjgbalc SET balcqty = balcqty + :ld_balcqty, balcamt = 0 , inqty = inqty + :ld_inqty, inamt = 0, thqty = thqty + :ld_thqty, thamt = 0, pypkqty = pypkqty + :ld_pypkqty, pypkamt = 0 WHERE ( mtrlid = :arg_mtrlid ) AND ( balcdateint = 0 ) AND ( status = :arg_status ) AND ( woodcode = :arg_woodcode ) AND ( sptid = :arg_sptid ) 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, sptid, mtrlid, status, woodcode, pcode, thqty, thamt, inqty, inamt, balcqty, balcamt, pypkqty, pypkamt, scid) VALUES (0, :arg_sptid, :arg_mtrlid, :arg_status, :arg_woodcode, :arg_pcode, :ld_thqty, 0, :ld_inqty, 0, :ld_balcqty, 0, :ld_pypkqty, 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