$PBExportHeader$f_cmp_fifo_cb_mtrlware.srf global type f_cmp_fifo_cb_mtrlware from function_object end type forward prototypes global function integer f_del_mtrlware_inmx (long arg_scid, long arg_mtrlwareid, long arg_inwareid, long arg_printid, string arg_inwarecode, datetime arg_inwaredate, decimal arg_inqty, decimal arg_inprice, long arg_if_outware, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg) global function integer f_cmp_fifo_cb_mtrlware (long arg_scid, long arg_mtrlwareid, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg) end prototypes global function integer f_del_mtrlware_inmx (long arg_scid, long arg_mtrlwareid, long arg_inwareid, long arg_printid, string arg_inwarecode, datetime arg_inwaredate, decimal arg_inqty, decimal arg_inprice, long arg_if_outware, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg);Long rslt = 1 long ls_newid ls_newid = f_sys_scidentity(0,"u_mtrlware_inmx","mtrlwaremxid",arg_msg,false,commit_transaction) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_mtrlware_inmx (mtrlwaremxid, scid, mtrlwareid, inwareid, printid, inwarecode, inwaredate, inqty, inprice, if_outware) VALUES ( :ls_newid, :arg_scid, :arg_mtrlwareid, :arg_inwareid, :arg_printid, :arg_inwarecode, :arg_inwaredate, :arg_inqty, :arg_inprice, :arg_if_outware) ; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入入库批明细失败"+"~n" 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 global function integer f_cmp_fifo_cb_mtrlware (long arg_scid, long arg_mtrlwareid, boolean arg_ifcommit, ref transaction commit_transaction, ref string arg_msg);Long rslt = 1 Long contractcnt Long i datastore ds ds = Create datastore ds.DataObject = "dddw_cmp_fifo_cb_mtrlware" ds.SetTransObject(commit_transaction) contractcnt = ds.Retrieve(arg_scid,arg_mtrlwareid) Long ll_inwareid ,ll_printid , ll_if_outware Decimal dec_inqty , dec_inprice ,dec_inamt UPDATE u_mtrlware_inmx SET outqty = 0 Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新进仓批明细已出仓数量失败1"+"~n" GOTO ext END IF FOR i = 1 To contractcnt ll_inwareid = 0 ll_printid = 0 ll_if_outware = 0 dec_inqty = 0 dec_inprice = 0 dec_inamt = 0 ll_inwareid = ds.Object.inwareid[i] ll_printid = ds.Object.printid[i] ll_if_outware = ds.Object.if_outware[i] dec_inqty = ds.Object.inqty[i] dec_inprice = ds.Object.inprice[i] dec_inamt = ds.Object.inamt[i] IF ll_if_outware = 0 THEN UPDATE u_inwaremx SET u_inwaremx.cost = :dec_inprice ,u_inwaremx.costamt = :dec_inamt Where scid = :arg_scid And inwareid = :ll_inwareid And printid = :ll_printid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新进仓明细成本失败1"+"~n" GOTO ext END IF ELSE // ll_if_outware = 1 UPDATE u_outwaremx SET u_outwaremx.cost = :dec_inprice ,u_outwaremx.costamt = :dec_inamt * (-1) Where scid = :arg_scid And outwareid = :ll_inwareid And printid = :ll_printid; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新负数出仓明细成本失败2"+"~n" GOTO ext END IF END IF NEXT DateTime dt dt = DateTime(Date('2000-01-01'),Time(0)) rslt = f_trigger_fifo_procedure(arg_scid,arg_mtrlwareid,dt,2,-1,-1,False,commit_transaction,arg_msg) //重算结存表 rslt =f_cmp_fifo_warebalc(arg_scid,arg_mtrlwareid,False,commit_transaction,arg_msg) 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