Stock overview and cost assignment - 6

mmccking發表於2012-10-17
* Get Gross Sales data
* Get Cost of Goods Sold data
* Get the Material data
* Get WIP data
* Get Inventory data
[@more@]

*&---------------------------------------------------------------------*
*& Form ARRANGE_CONS_STOCK
*&---------------------------------------------------------------------*
* Arrange the Valuated Stock with Subcontractor
*----------------------------------------------------------------------*
FORM ARRANGE_CONS_STOCK .

* Extract Valuated Stock with Subcontractor(From OBEW/OBEWH)
PERFORM FRM_GET_CONS_STOCK.

* Get the CONS batch
PERFORM GET_CONS_BATCH.

* Assign amount to batch SO stock
PERFORM ASSIGN_TO_CONS_BATCH.

ENDFORM. " ARRANGE_CONS_STOCK
*&---------------------------------------------------------------------*
*& Form GET_CONS_BATCH
*&---------------------------------------------------------------------*
* Get the CONS batch
*----------------------------------------------------------------------*
FORM GET_CONS_BATCH .

DATA:
LTH_MSLB LIKE LINE OF TD_MSLB,
LTD_MSLBH TYPE TABLE OF TYP_MSLB,
LTH_MSLBH LIKE LINE OF LTD_MSLBH.

DATA:
LW_INDEX TYPE SY-TABIX.

SELECT MATNR " Material Number
WERKS " Plant
CHARG " Batch Number
LIFNR " Account Number of Vendor or Creditor
LFGJA " Fiscal Year of Current Period
LFMON " Current period (posting period)
LBLAB " Valuated Unrestricted-Use Stock
LBINS " Stock in Quality Inspection
LBEIN " Total Stock of All Restricted Batches
LBUML " Stock in Transfer for Subcontracting (Plant to Plant)
INTO CORRESPONDING FIELDS OF TABLE TD_MSLB
FROM MSLB
FOR ALL ENTRIES IN TD_OBEW
WHERE WERKS = P_WERKS "Valuation Area
AND MATNR = TD_OBEW-MATNR. " Material Number

LOOP AT TD_MSLB INTO LTH_MSLB.

LW_INDEX = SY-TABIX.

IF LTH_MSLB-LFGJA > P_GJAHR
OR ( LTH_MSLB-LFGJA = P_GJAHR
AND LTH_MSLB-LFMON > P_PERID ).

SELECT MATNR " Material Number
WERKS " Plant
CHARG " Batch Number
LIFNR " Account Number of Vendor or Creditor
LFGJA " Fiscal Year of Current Period
LFMON " Current period (posting period)
LBLAB " Valuated Unrestricted-Use Stock
LBINS " Stock in Quality Inspection
LBEIN " Total Stock of All Restricted Batches
LBUML " Stock in Transfer for Subcontracting (Plant to Plant)
FROM MSLBH
INTO CORRESPONDING FIELDS OF TABLE LTD_MSLBH
UP TO 1 ROWS
WHERE MATNR = LTH_MSLB-MATNR " Material Number
AND WERKS = LTH_MSLB-WERKS " Plant
AND CHARG = LTH_MSLB-CHARG " Batch Number
AND ( LFGJA < P_GJAHR
OR ( LFGJA = P_GJAHR
AND LFMON <= P_PERID ) )
ORDER BY LFGJA DESCENDING
LFMON DESCENDING.

IF SY-SUBRC = 0.
READ TABLE LTD_MSLBH INTO LTH_MSLBH INDEX 1.
IF SY-SUBRC = 0.

MODIFY TD_MSLB FROM LTH_MSLBH INDEX LW_INDEX.
ENDIF.

ENDIF.

ENDIF.

REFRESH LTD_MSLBH.
CLEAR LTH_MSLBH.
CLEAR LTH_MSLB.

ENDLOOP.

ENDFORM. " GET_CONS_BATCH
*&---------------------------------------------------------------------*
*& Form ASSIGN_TO_CONS_BATCH
*&---------------------------------------------------------------------*
* Assign amount to batch SO stock
*----------------------------------------------------------------------*
FORM ASSIGN_TO_CONS_BATCH .

DATA:
LTH_OBEW LIKE LINE OF TD_OBEW,
LTH_MSLB LIKE LINE OF TD_MSLB,
LTH_CT000401 LIKE LINE OF TD_CT000401.

DATA:
LW_AMOUNT TYPE MSLB-LBLAB,
LW_SALK3 TYPE OBEW-SALK3.

LOOP AT TD_OBEW INTO LTH_OBEW.

LOOP AT TD_MSLB INTO LTH_MSLB WHERE MATNR = LTH_OBEW-MATNR
AND WERKS = LTH_OBEW-BWKEY
AND LIFNR = LTH_OBEW-LIFNR.

LTH_CT000401-MATNR = LTH_MSLB-MATNR.
LTH_CT000401-WERKS = LTH_MSLB-WERKS.
LTH_CT000401-LGORT = SPACE.
LTH_CT000401-CHARG = LTH_MSLB-CHARG.
LTH_CT000401-SOBKZ = C_CNCS_STOCK. "Stock Indicator
LTH_CT000401-BUKRS = P_BUKRS.
LTH_CT000401-GJAHR = P_GJAHR.
LTH_CT000401-MONAT = P_PERID. "Perid
LTH_CT000401-BKLAS = LTH_OBEW-BKLAS. "Valuetion class

LTH_CT000401-QUANT = LTH_MSLB-LBLAB + " Valuated Unrestricted-Use Stock
LTH_MSLB-LBINS + " Stock in Quality Inspection
LTH_MSLB-LBEIN + " Total Stock of All Restricted Batches.
LTH_MSLB-LBUML. " Stock in Transfer for Subcontracting


LTH_CT000401-MEINS = LTH_OBEW-PEINH. "Price Unit

IF LTH_OBEW-VPRSV = C_S.
LTH_CT000401-AMOUNT = LTH_CT000401-QUANT * LTH_OBEW-STPRS / LTH_OBEW-PEINH.
ELSE.
LTH_CT000401-AMOUNT = LTH_CT000401-QUANT * LTH_OBEW-VERPR / LTH_OBEW-PEINH.
ENDIF.

* Get Account
IF LTH_OBEW-BKLAS = C_2110.
LTH_CT000401-HKONT = W_FACCOUNT.
ELSE.
LTH_CT000401-HKONT = W_SACCOUNT.
ENDIF.

* Get the routing data
PERFORM GET_ROUTING_DATA USING '
LTH_CT000401-WERKS
LTH_CT000401-LGORT
LTH_CT000401-MATNR
LTH_CT000401-CHARG
CHANGING LTH_CT000401-RTGRP1
LTH_CT000401-RTGRP2
LTH_CT000401-RTGRP3
LTH_CT000401-RTGRP4
LTH_CT000401-RTGRP5
LTH_CT000401-RTGRP6
LTH_CT000401-RTGRP7
LTH_CT000401-RTGRP8.
* Get profit center
SELECT SINGLE PRCTR
FROM MARC
INTO LTH_CT000401-PRCTR
WHERE MATNR = LTH_CT000401-MATNR
AND WERKS = LTH_CT000401-WERKS.

APPEND LTH_CT000401 TO TD_CT000401.

LW_AMOUNT = LW_AMOUNT + LTH_CT000401-QUANT.
LW_SALK3 = LW_SALK3 + LTH_CT000401-AMOUNT.

CLEAR LTH_CT000401.
ENDLOOP.

* Qty without batch
IF LW_AMOUNT < LTH_OBEW-LBKUM.

LW_AMOUNT = LTH_OBEW-LBKUM - LW_AMOUNT.

IF LTH_OBEW-VPRSV = C_S.
LTH_CT000401-AMOUNT = LW_AMOUNT * LTH_OBEW-STPRS / LTH_OBEW-PEINH.
ELSE.
LTH_CT000401-AMOUNT = LW_AMOUNT * LTH_OBEW-VERPR / LTH_OBEW-PEINH.
ENDIF.

LTH_CT000401-MATNR = LTH_OBEW-MATNR.
LTH_CT000401-WERKS = LTH_OBEW-BWKEY.
LTH_CT000401-LGORT = SPACE.
LTH_CT000401-CHARG = SPACE.
LTH_CT000401-SOBKZ = C_CNCS_STOCK. "Stock Indicator
LTH_CT000401-BUKRS = P_BUKRS.
LTH_CT000401-GJAHR = P_GJAHR.
LTH_CT000401-MONAT = P_PERID. "Perid
LTH_CT000401-BKLAS = LTH_OBEW-BKLAS. "Valuetion class
LTH_CT000401-QUANT = LW_AMOUNT. "Total stock qty
LTH_CT000401-MEINS = LTH_OBEW-PEINH. "Price Unit
* Get Account
IF LTH_OBEW-BKLAS = C_2110.
LTH_CT000401-HKONT = W_FACCOUNT.
ELSE.
LTH_CT000401-HKONT = W_SACCOUNT.
ENDIF.

* Get the routing data
PERFORM GET_ROUTING_DATA USING '
LTH_CT000401-WERKS
LTH_CT000401-LGORT
LTH_CT000401-MATNR
LTH_CT000401-CHARG
CHANGING LTH_CT000401-RTGRP1
LTH_CT000401-RTGRP2
LTH_CT000401-RTGRP3
LTH_CT000401-RTGRP4
LTH_CT000401-RTGRP5
LTH_CT000401-RTGRP6
LTH_CT000401-RTGRP7
LTH_CT000401-RTGRP8.
* Get profit center
SELECT SINGLE PRCTR
FROM MARC
INTO LTH_CT000401-PRCTR
WHERE MATNR = LTH_CT000401-MATNR
AND WERKS = LTH_CT000401-WERKS.

APPEND LTH_CT000401 TO TD_TEMP401.

LW_SALK3 = LW_SALK3 + LTH_CT000401-AMOUNT.

CLEAR LTH_CT000401.

ENDIF.

* Balance the total amount
IF LW_SALK3 <> LTH_OBEW-SALK3.

LTH_CT000401-AMOUNT = LTH_OBEW-SALK3 - LW_SALK3.

LTH_CT000401-MATNR = LTH_OBEW-MATNR.
LTH_CT000401-WERKS = LTH_OBEW-BWKEY.
LTH_CT000401-LGORT = SPACE.
LTH_CT000401-CHARG = SPACE.
LTH_CT000401-SOBKZ = C_SO_STOCK. "Stock Indicator
LTH_CT000401-BUKRS = P_BUKRS.
LTH_CT000401-GJAHR = P_GJAHR.
LTH_CT000401-MONAT = P_PERID. "Perid
LTH_CT000401-BKLAS = LTH_OBEW-BKLAS. "Valuetion class
* LTH_CT000401-QUANT = LW_AMOUNT. "Total stock qty
LTH_CT000401-MEINS = LTH_OBEW-PEINH. "Price Unit
* Get Account
IF LTH_OBEW-BKLAS = C_2110.
LTH_CT000401-HKONT = W_FACCOUNT.
ELSE.
LTH_CT000401-HKONT = W_SACCOUNT.
ENDIF.

* Get the routing data
PERFORM GET_ROUTING_DATA USING '
LTH_CT000401-WERKS
LTH_CT000401-LGORT
LTH_CT000401-MATNR
LTH_CT000401-CHARG
CHANGING LTH_CT000401-RTGRP1
LTH_CT000401-RTGRP2
LTH_CT000401-RTGRP3
LTH_CT000401-RTGRP4
LTH_CT000401-RTGRP5
LTH_CT000401-RTGRP6
LTH_CT000401-RTGRP7
LTH_CT000401-RTGRP8.
* Get profit center
SELECT SINGLE PRCTR
FROM MARC
INTO LTH_CT000401-PRCTR
WHERE MATNR = LTH_CT000401-MATNR
AND WERKS = LTH_CT000401-WERKS.

APPEND LTH_CT000401 TO TD_CT000401.
CLEAR LTH_CT000401.

ENDIF.

CLEAR: LW_SALK3,
LW_AMOUNT.

CLEAR LTH_OBEW.

ENDLOOP.

ENDFORM. " ASSIGN_TO_CONS_BATCH

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8356764/viewspace-1059575/,如需轉載,請註明出處,否則將追究法律責任。

相關文章