- 论坛徽章:
- 0
|
REPORT ZPCRCO007.
TABLES: MKAL, "Production Versions of Material
MAKT,
PLAF, "Planned order
AUFK, "Order master data
AFPO, "Order item
AFKO, "Order header data PP orders
AUFM, "Goods movements for order
CRHD, "WORK CENTER HEADER
AFVC, "Operation within an order
AFRU, "Order completion confirmations
CRTX , "DETAILS
KAKO.
*----------------------------------------------------------------------*
* INCLUDE
*----------------------------------------------------------------------*
INCLUDE ZTAFCO001.
TYPE-POOLS: SLIS.
FIELD-SYMBOLS: ,
* TYPE P,
TYPE STANDARD TABLE,
,
.
TYPES: BEGIN OF T_DEFULT,
NUM(1) TYPE C,
PLANT(1) TYPE C,
DATE(1) TYPE C,
PRODU(1) TYPE C,
MATNR(1) TYPE C,
MRP(1) TYPE C,
END OF T_DEFULT.
TYPES:
BEGIN OF T_DYSQL,
TXT(72) TYPE C,
END OF T_DYSQL.
TYPES: BEGIN OF T_AFKO,
MDV01 LIKE MKAL-MDV01,
AUFNR LIKE AUFK-AUFNR, "Production order
WERKS LIKE AUFK-WERKS,
OBJNR LIKE AUFK-OBJNR,
GAMNG LIKE AFKO-GAMNG,
GSTRS LIKE AFKO-GSTRS,
GLTRS LIKE AFKO-GLTRS,
PLNBEZ LIKE AFKO-PLNBEZ,
AUFPL LIKE AFKO-AUFPL,
DISPO LIKE AFKO-DISPO,
VERID LIKE AFPO-VERID,
WEMNG LIKE AFPO-WEMNG,
MAKTX LIKE MAKT-MAKTX,
END OF T_AFKO.
TYPES: BEGIN OF T_PLAF,
PLNUM LIKE PLAF-PLNUM,
PWWRK LIKE PLAF-PWWRK,
GSMNG LIKE PLAF-GSMNG,
PSTTR LIKE PLAF-PSTTR,
PEDTR LIKE PLAF-PEDTR,
DISPO LIKE PLAF-DISPO,
VERID LIKE PLAF-VERID,
* ORFIN LIKE PLAF-PEDTR,
MATNR LIKE PLAF-MATNR,
MDV01 LIKE MKAL-MDV01,
END OF T_PLAF.
*
TYPES: BEGIN OF T_SUM,
NUM(16) type c,
MENGE LIKE MSEG-MENGE,
END OF T_SUM.
TYPES: BEGIN OF T_LINE,
DATUM TYPE SY-DATUM,
CNT TYPE I,
VERID TYPE VERID,
LDATA(16) TYPE C,
* LINE TYPE I,
END OF T_LINE.
TYPES: BEGIN OF T_LDATA,
LDATA(16) TYPE C,
FLG TYPE C,
END OF T_LDATA.
TYPES: BEGIN OF T_MKAL,
MATNR LIKE MSEG-MATNR,
WERKS LIKE MSEG-WERKS,
MENGE LIKE MSEG-MENGE,
VERID LIKE MKAL-VERID,
MDV01 LIKE MKAL-MDV01,
END OF T_MKAL.
TYPES: BEGIN OF T_DATA,
MDV01 LIKE MKAL-MDV01,
END OF T_DATA.
DATA :W_DEFULT TYPE T_DEFULT,
I_DEFULT TYPE STANDARD TABLE OF T_DEFULT,
W_AFKO TYPE T_AFKO,
W_AFKOBAK TYPE T_AFKO,
W_AFKOBAK1 TYPE T_AFKO,
I_AFKO TYPE STANDARD TABLE OF T_AFKO,
I_AFKOBAK TYPE STANDARD TABLE OF T_AFKO,
I_AFKOBAK1 TYPE STANDARD TABLE OF T_AFKO,
W_PLAF TYPE T_PLAF,
I_PLAF TYPE STANDARD TABLE OF T_PLAF,
W_SUM TYPE T_SUM,
I_SUM TYPE STANDARD TABLE OF T_SUM,
W_LINE TYPE T_LINE,
I_LINE TYPE STANDARD TABLE OF T_LINE,
I_LINE1 TYPE STANDARD TABLE OF T_LINE,
* W_LDATA TYPE T_LDATA,
* I_LDATA TYPE STANDARD TABLE OF T_LDATA,
W_MKAL TYPE T_MKAL,
I_MKAL TYPE STANDARD TABLE OF T_MKAL,
W_DATA TYPE T_DATA,
I_DATA TYPE STANDARD TABLE OF T_DATA.
DATA: FCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GT_EVENTS TYPE SLIS_T_EVENT,
V_REPID LIKE SY-REPID,
V_NUM TYPE C,
V_DATE(2) TYPE N.
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_PLANT LIKE AUFM-WERKS OBLIGATORY . "plant
SELECT-OPTIONS : S_DATE FOR SY-DATUM NO-EXTENSION , "date
S_P_LIN FOR MKAL-MDV01 , "production line
S_M_MAS FOR AUFM-MATNR , "material master
S_MRP_C FOR AFKO-DISPO . "mrp controller
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-P04.
SELECTION-SCREEN POSITION 33.
PARAMETERS P_CHKBOX AS CHECKBOX.
SELECTION-SCREEN COMMENT 36(11) TEXT-P05.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) TEXT-P01.
SELECTION-SCREEN POSITION 33.
PARAMETERS P_START RADIOBUTTON GROUP GRP1 DEFAULT 'X' . "Multi Level
SELECTION-SCREEN COMMENT 36(11) TEXT-P02.
SELECTION-SCREEN POSITION 50.
PARAMETERS P_END RADIOBUTTON GROUP GRP1. "Single Level
SELECTION-SCREEN COMMENT 53(12) TEXT-P03.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK1.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
PERFORM FRM_CLEAR_TABLE.
PERFORM FRM_DEFULT_SET.
PERFORM FRM_BUILD_EVENTS.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------
AT SELECTION-SCREEN.
CHECK SY-UCOMM = 'ONLI' OR
SY-UCOMM = SPACE.
* Screen check
PERFORM FRM_VALUE_CHECK.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'S_DATE-LOW'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* SAPGUI_PROGRESS_INDICATOR
PERFORM FRM_GUI_INDICATOR.
* Manufacturing data read
PERFORM FRM_READ_AFKO.
* Plan arrangements data read
PERFORM FRM_READ_PLAF.
* data edit
PERFORM FRM_DATA_EDIT.
IF I_AFKO[] IS INITIAL.
MESSAGE S008(ZP001).
STOP.
ENDIF.
* table create
PERFORM FRM_BUILD_FIELD_CATALOG.
* CREATE_DYNAMIC_TABLE
PERFORM FRM_CREATE_TABLE.
* data create
PERFORM FRM_TABLE_CREATE.
* alv display
PERFORM FRM_GRID_DISPLAY.
*&---------------------------------------------------------------------*
*& Form build_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_BUILD_EVENTS.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = GT_EVENTS.
READ TABLE GT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE SLIS_EV_USER_COMMAND TO LS_EVENT-FORM.
APPEND LS_EVENT TO GT_EVENTS.
ENDIF.
ENDFORM. " build_events
*&---------------------------------------------------------------------*
*& Form FRM_DEFULT_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_DEFULT_SET.
S_DATE-LOW = SY-DATUM.
S_DATE-HIGH = SY-DATUM + 7.
APPEND S_DATE.
CLEAR W_DEFULT.
W_DEFULT-NUM = '1'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
APPEND W_DEFULT TO I_DEFULT.
CLEAR W_DEFULT.
W_DEFULT-NUM = '2'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
W_DEFULT-PRODU = '3'.
APPEND W_DEFULT TO I_DEFULT.
CLEAR W_DEFULT.
W_DEFULT-NUM = '3'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
W_DEFULT-MATNR = '4'.
APPEND W_DEFULT TO I_DEFULT.
CLEAR W_DEFULT.
W_DEFULT-NUM = '4'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
W_DEFULT-MRP = '5'.
APPEND W_DEFULT TO I_DEFULT.
CLEAR W_DEFULT.
W_DEFULT-NUM = '5'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
W_DEFULT-PRODU = '3'.
W_DEFULT-MATNR = '4'.
APPEND W_DEFULT TO I_DEFULT.
CLEAR W_DEFULT.
W_DEFULT-NUM = '6'.
W_DEFULT-PLANT = '1'.
W_DEFULT-DATE = '2'.
W_DEFULT-PRODU = '3'.
W_DEFULT-MRP = '5'.
APPEND W_DEFULT TO I_DEFULT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'S_DATE-LOW'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_DEFULT_SET
*&---------------------------------------------------------------------*
*& Form frm_gui_indicator
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_GUI_INDICATOR.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 100
TEXT = 'Processing Pls. wait..........'.
CLEAR V_DATE.
V_DATE = S_DATE-HIGH - S_DATE-LOW + 1.
ENDFORM. " frm_gui_indicator
*&---------------------------------------------------------------------*
*& Form frm_Read_prod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_READ_AFKO.
DATA: L_I_DYSQL TYPE TABLE OF T_DYSQL,
L_W_DYSQL TYPE T_DYSQL.
DATA: L_INDEX TYPE SY-TABIX.
DATA L_DATUM TYPE SY-DATUM.
DATA L_SDATE TYPE SY-DATUM.
DATA L_STATUS TYPE C.
CLEAR L_I_DYSQL[].
CLEAR L_W_DYSQL.
CLEAR L_INDEX.
CLEAR L_DATUM.
* Details condition
L_W_DYSQL-TXT = 'AFPO~POSNR = '''.
CONCATENATE L_W_DYSQL-TXT '0001' ''''
INTO L_W_DYSQL-TXT .
APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
CLEAR L_W_DYSQL.
IF P_START = 'X'.
L_W_DYSQL-TXT = 'AND AFKO~GSTRS >= '.
ELSE.
L_W_DYSQL-TXT = 'AND AFKO~GLTRS >= '.
ENDIF.
* The data 30 days ago is acquired
L_DATUM = S_DATE-LOW - 30.
CONCATENATE L_W_DYSQL-TXT L_DATUM
INTO L_W_DYSQL-TXT SEPARATED BY SPACE.
APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
CLEAR L_W_DYSQL.
IF P_START = 'X'.
L_W_DYSQL-TXT = 'AND AFKO~GSTRS '0' AND L_STATUS '1'.
DELETE I_AFKO .
CLEAR: W_AFKO,
L_INDEX.
CONTINUE.
ENDIF.
MODIFY I_AFKO FROM W_AFKO INDEX L_INDEX.
CLEAR: W_AFKO,
L_INDEX.
ENDLOOP.
ENDIF.
********************TEST
*TYPES: BEGIN OF T_OUTPUT,
* TEST(500) TYPE C,
* END OF T_OUTPUT.
*DATA L_A(18) TYPE C.
*DATA :W_OUTPUT TYPE T_OUTPUT,
* I_OUTPUT TYPE STANDARD TABLE OF T_OUTPUT.
* DATA C_TAB TYPE X VALUE '09'.
* LOOP AT I_AFKO INTO W_AFKO.
* CLEAR L_A.
* WRITE W_AFKO-GAMNG TO L_A.
* CONCATENATE
* W_AFKO-MDV01
* W_AFKO-AUFNR
* W_AFKO-WERKS
* W_AFKO-OBJNR
* L_A
* W_AFKO-GSTRS
* W_AFKO-GLTRS
* W_AFKO-PLNBEZ
* W_AFKO-AUFPL
* W_AFKO-DISPO
* W_AFKO-VERID
** W_AFKO-WEMNG
* W_AFKO-MAKTX
* INTO W_OUTPUT SEPARATED BY C_TAB.
* APPEND W_OUTPUT TO I_OUTPUT.
* ENDLOOP.
*
* CALL FUNCTION 'WS_DOWNLOAD'
* EXPORTING
** BIN_FILESIZE = ' '
** CODEPAGE = ' '
* FILENAME = 'C:\xiaoxintestdata.xls'
* FILETYPE = 'ASC'
** MODE = ' '
** WK1_N_FORMAT = ' '
** WK1_N_SIZE = ' '
** WK1_T_FORMAT = ' '
** WK1_T_SIZE = ' '
** COL_SELECT = ' '
** COL_SELECTMASK = ' '
** NO_AUTH_CHECK = ' '
** IMPORTING
** FILELENGTH =
* TABLES
* DATA_TAB = I_OUTPUT
** FIELDNAMES =
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_WRITE_ERROR = 2
* INVALID_FILESIZE = 3
* INVALID_TYPE = 4
* NO_BATCH = 5
* UNKNOWN_ERROR = 6
* INVALID_TABLE_WIDTH = 7
* GUI_REFUSE_FILETRANSFER = 8
* CUSTOMER_ERROR = 9
* OTHERS = 10
* .
* IF SY-SUBRC 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*
********************TEST
ENDFORM. " frm_Read_prod
*&---------------------------------------------------------------------*
*& Form FRM_READ_PLAF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_READ_PLAF.
DATA: L_I_DYSQL TYPE TABLE OF T_DYSQL,
L_W_DYSQL TYPE T_DYSQL.
DATA L_DATUM TYPE SY-DATUM.
* Date condition
CLEAR L_I_DYSQL[].
CLEAR L_W_DYSQL.
IF P_START = 'X'.
L_W_DYSQL-TXT = ' PSTTR >= '.
ELSE.
L_W_DYSQL-TXT = ' PEDTR >= '.
ENDIF.
* The data 30 days ago is acquired
L_DATUM = S_DATE-LOW - 30.
CONCATENATE L_W_DYSQL-TXT L_DATUM
INTO L_W_DYSQL-TXT SEPARATED BY SPACE.
APPEND L_W_DYSQL TO L_I_DYSQL.
* Date condition
CLEAR L_W_DYSQL.
IF P_START = 'X'.
L_W_DYSQL-TXT = 'AND PSTTR '1'.
LOOP AT I_AFKO INTO W_AFKO.
L_INDEX = SY-TABIX.
* Input Plant and Date and Production Line
IF V_NUM = '2'.
IF W_AFKO-MDV01 IN S_P_LIN.
ELSE.
DELETE I_AFKO INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Material no
IF V_NUM = '3'.
IF W_AFKO-PLNBEZ IN S_M_MAS.
ELSE.
DELETE I_AFKO INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and MRP Controller
IF V_NUM = '4'.
IF W_AFKO-DISPO IN S_MRP_C.
ELSE.
DELETE I_AFKO INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Date and Production Line and Material no
IF V_NUM = '5'.
IF W_AFKO-MDV01 IN S_P_LIN AND W_AFKO-PLNBEZ IN S_M_MAS.
ELSE.
DELETE I_AFKO INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Date and Production Line and MRP Controller
IF V_NUM = '6'.
IF W_AFKO-MDV01 IN S_P_LIN AND W_AFKO-DISPO IN S_MRP_C.
ELSE.
DELETE I_AFKO INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
CLEAR W_AFKO.
ENDLOOP.
LOOP AT I_PLAF INTO W_PLAF.
L_INDEX = SY-TABIX.
* Input Plant and Date and Production Line
IF V_NUM = '2'.
IF W_PLAF-MDV01 IN S_P_LIN.
ELSE.
DELETE I_PLAF INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Material no
IF V_NUM = '3'.
IF W_PLAF-MATNR IN S_M_MAS.
ELSE.
DELETE I_PLAF INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and MRP Controller
IF V_NUM = '4'.
IF W_PLAF-DISPO IN S_MRP_C.
ELSE.
DELETE I_PLAF INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Date and Production Line and Material no
IF V_NUM = '5'.
IF W_PLAF-MDV01 IN S_P_LIN AND W_PLAF-MATNR IN S_M_MAS.
ELSE.
DELETE I_PLAF INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
* Input Plant and Date and Production Line and MRP Controller
IF V_NUM = '6'.
IF W_PLAF-MDV01 IN S_P_LIN AND W_PLAF-DISPO IN S_MRP_C.
ELSE.
DELETE I_PLAF INDEX L_INDEX.
CONTINUE.
ENDIF.
ENDIF.
CLEAR W_PLAF.
ENDLOOP.
ENDIF.
ENDFORM. " FRM_DATA_EDIT
*&---------------------------------------------------------------------*
*& Form FRM_GRID_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_GRID_DISPLAY.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
LAYOUT-NO_INPUT = 'X'.
LAYOUT-F2CODE = '&ETA'.
LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
LAYOUT-DETAIL_POPUP = 'X'.
V_REPID = SY-REPID.
LAYOUT-info_fieldname = 'COLOR'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
IS_LAYOUT = LAYOUT
I_GRID_TITLE = TEXT-T01
IT_FIELDCAT = FCAT[]
IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = .
ENDFORM. " FRM_GRID_DISPLAY
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM FRM_BUILD_FIELD_CATALOG.
DATA: IS_FIELDCAT LIKE LINE OF IT_FIELDCAT,
WCAT LIKE LINE OF FCAT.
DATA L_DATE TYPE SY-DATUM.
DATA L_DATE1 TYPE SY-DATUM.
DATA L_C(16) TYPE C.
DATA L_N(4) TYPE N.
DATA L_NI(4) TYPE N.
DATA L_I TYPE I.
DATA L_SDATE TYPE SY-DATUM.
DATA L_DATECHAR(10) TYPE C.
DATA L_II TYPE I.
CLEAR: L_DATE,L_DATECHAR.
* Production Line
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '58'.
IS_FIELDCAT-FIELDNAME = 'PRODU'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
WCAT-COL_POS = 1.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_L = 'Production Line'.
WCAT-FIX_COLUMN = 'X'.
APPEND WCAT TO FCAT.
CLEAR WCAT.
* order no
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '50'.
IS_FIELDCAT-FIELDNAME = 'ORDER'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
WCAT-COL_POS = 2.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_L = 'Order No'. "IS_FIELDCAT-FIELDNAME.
WCAT-FIX_COLUMN = 'X'.
APPEND WCAT TO FCAT.
* PRODVER
CLEAR WCAT.
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '4'.
IS_FIELDCAT-FIELDNAME = 'PRODVER'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
WCAT-COL_POS = 3.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_L = 'Prod Ver'. "IS_FIELDCAT-FIELDNAME.
WCAT-FIX_COLUMN = 'X'.
APPEND WCAT TO FCAT.
* OVERDUE
CLEAR WCAT.
IS_FIELDCAT-INTTYPE = 'p'.
IS_FIELDCAT-INTLEN = '13'.
IS_FIELDCAT-FIELDNAME = 'OVERDUE'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
WCAT-COL_POS = 4.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_S = 'Over Due'. "IS_FIELDCAT-FIELDNAME.
WCAT-FIX_COLUMN = 'X'.
APPEND WCAT TO FCAT.
CLEAR WCAT.
* detail
L_DATE = S_DATE-LOW.
L_DATE1 = S_DATE-LOW.
DO V_DATE TIMES.
LOOP AT I_AFKO INTO W_AFKO .
IF P_START = 'X'.
L_SDATE = W_AFKO-GSTRS.
ELSE.
L_SDATE = W_AFKO-GLTRS.
ENDIF.
IF L_DATE = L_SDATE.
CLEAR W_LINE.
W_LINE-DATUM = L_SDATE.
IF P_CHKBOX = 'X'.
W_LINE-VERID = W_AFKO-VERID+3(1).
ENDIF.
APPEND W_LINE TO I_LINE.
ENDIF.
ENDLOOP.
LOOP AT I_PLAF INTO W_PLAF.
IF P_START = 'X'.
L_SDATE = W_PLAF-PSTTR.
ELSE.
L_SDATE = W_PLAF-PEDTR.
ENDIF.
IF L_DATE1 = L_SDATE.
CLEAR W_LINE.
W_LINE-DATUM = L_SDATE.
IF P_CHKBOX = 'X'.
W_LINE-VERID = W_PLAF-VERID+3(1).
ENDIF.
APPEND W_LINE TO I_LINE.
ENDIF.
ENDLOOP.
L_DATE = L_DATE + 1.
L_DATE1 = L_DATE1 + 1.
ENDDO.
LOOP AT I_LINE INTO W_LINE.
COLLECT W_LINE INTO I_LINE1.
ENDLOOP.
CLEAR I_LINE[].
I_LINE[] = I_LINE1[].
CLEAR I_LINE1[].
SORT I_LINE BY DATUM.
L_I = 0.
LOOP AT I_LINE INTO W_LINE.
L_I = L_I + 1.
CLEAR WCAT.
CLEAR IS_FIELDCAT.
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '17'.
CONCATENATE W_LINE-DATUM W_LINE-VERID INTO L_C.
IS_FIELDCAT-FIELDNAME = L_C.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
W_LINE-LDATA = L_C.
CLEAR L_DATECHAR.
WRITE W_LINE-DATUM TO L_DATECHAR.
IF P_CHKBOX = 'X'.
WRITE W_LINE-DATUM TO L_DATECHAR.
CONCATENATE L_DATECHAR '(' W_LINE-VERID ')' INTO L_C.
ELSE.
WRITE W_LINE-DATUM TO L_C .
ENDIF.
WCAT-COL_POS = SY-TABIX + 4.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_L = L_C. "IS_FIELDCAT-FIELDNAME.
WCAT-FIX_COLUMN = 'X'.
IF W_LINE-DATUM = SY-DATUM.
WCAT-EMPHASIZE ='C1'.
ENDIF.
APPEND WCAT TO FCAT.
MODIFY I_LINE FROM W_LINE
TRANSPORTING LDATA
WHERE DATUM = W_LINE-DATUM AND VERID = W_LINE-VERID.
ENDLOOP.
* ACCMQTY
CLEAR WCAT.
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '17'.
IS_FIELDCAT-FIELDNAME = 'ACCMQTY'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
WCAT-COL_POS = L_I + 8.
WCAT-FIELDNAME = IS_FIELDCAT-FIELDNAME. "IS_FIELDCAT-FIELDNAME.
WCAT-SELTEXT_S = 'Accm Qty'. "IS_FIELDCAT-FIELDNAME.
WCAT-FIX_COLUMN = 'X'.
APPEND WCAT TO FCAT.
CLEAR WCAT.
* color
CLEAR IS_FIELDCAT.
IS_FIELDCAT-INTTYPE = 'C'.
IS_FIELDCAT-INTLEN = '4'.
IS_FIELDCAT-FIELDNAME = 'COLOR'.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
ENDFORM. " FRM_BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form FRM_CLEAR_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_TABLE.
CLEAR: W_DEFULT,
I_DEFULT[],
W_AFKO,
I_AFKO[],
W_PLAF,
I_PLAF[],
W_MKAL,
I_MKAL[].
ENDFORM. " FRM_CLEAR_TABLE
*&---------------------------------------------------------------------*
*& Form FRM_TABLE_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_TABLE_CREATE.
DATA L_N(4) TYPE N.
DATA L_C(16) TYPE C.
DATA L_II TYPE I.
DATA L_DATUM TYPE SY-DATUM.
DATA L_SDATE TYPE SY-DATUM.
DATA L_EDATE TYPE SY-DATUM.
DATA L_SUM TYPE AFPO-WEMNG.
DATA L_LINESUM TYPE AFPO-WEMNG.
DATA L_MAKTX TYPE MAKT-MAKTX.
DATA L_SUMLINE TYPE AFPO-WEMNG.
DATA L_SUMSUM TYPE AFPO-WEMNG.
DATA L_MDV01 TYPE MDV01.
DATA L_MATNR TYPE MATNR.
DATA L_VERID TYPE VERID.
DATA L_MDV01_1 TYPE MDV01.
DATA L_MATNR_1 TYPE MATNR.
DATA L_VERID_1 TYPE VERID.
CLEAR I_DATA[].
CLEAR W_DATA.
CLEAR L_MDV01.
CLEAR L_VERID.
CLEAR .
CLEAR W_AFKOBAK.
CLEAR L_DATUM.
CLEAR I_AFKOBAK[].
CLEAR I_AFKOBAK1[].
LOOP AT I_AFKO INTO W_AFKO.
W_AFKOBAK-MDV01 = W_AFKO-MDV01.
W_AFKOBAK-VERID = W_AFKO-VERID.
W_AFKOBAK-PLNBEZ = W_AFKO-PLNBEZ.
APPEND W_AFKOBAK TO I_AFKOBAK.
ENDLOOP.
CLEAR W_AFKOBAK.
LOOP AT I_AFKOBAK INTO W_AFKOBAK.
COLLECT W_AFKOBAK INTO I_AFKOBAK1.
ENDLOOP.
CLEAR W_AFKOBAK.
SORT I_AFKO BY MDV01 VERID PLNBEZ.
DELETE I_AFKOBAK1 WHERE MDV01 = SPACE
OR VERID = SPACE.
LOOP AT I_AFKOBAK1 INTO W_AFKOBAK .
READ TABLE I_AFKO INTO W_AFKO
WITH KEY PLNBEZ = W_AFKOBAK-PLNBEZ.
W_AFKOBAK-MAKTX = W_AFKO-MAKTX.
MODIFY I_AFKOBAK1 FROM W_AFKOBAK TRANSPORTING MAKTX
WHERE PLNBEZ = W_AFKOBAK-PLNBEZ.
ENDLOOP.
SORT I_AFKOBAK1 BY MDV01 VERID PLNBEZ .
LOOP AT I_AFKOBAK1 INTO W_AFKOBAK .
*LINE
W_AFKOBAK1 = W_AFKOBAK.
AT NEW MDV01.
ASSIGN COMPONENT 'PRODU' OF STRUCTURE TO .
= W_AFKOBAK-MDV01.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE TO .
= 'C600'.
APPEND TO .
CLEAR .
ENDAT.
CLEAR L_MAKTX.
CLEAR L_LINESUM.
CLEAR W_LINE.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE TO .
= 'C400'.
CONCATENATE W_AFKOBAK-PLNBEZ W_AFKOBAK-MAKTX
INTO L_MAKTX SEPARATED BY SPACE.
ASSIGN COMPONENT 'PRODU' OF STRUCTURE TO .
= L_MAKTX.
*DETAIL
LOOP AT I_AFKO INTO W_AFKO WHERE MDV01 = W_AFKOBAK-MDV01
AND VERID = W_AFKOBAK-VERID
AND PLNBEZ = W_AFKOBAK-PLNBEZ.
ASSIGN COMPONENT 'ORDER' OF STRUCTURE TO .
= W_AFKO-AUFNR.
ASSIGN COMPONENT 'PRODVER' OF STRUCTURE TO .
= W_AFKO-VERID.
L_DATUM = S_DATE-LOW.
IF P_START = 'X'.
L_SDATE = W_AFKO-GSTRS.
ELSE.
L_SDATE = W_AFKO-GLTRS.
ENDIF.
IF L_SDATE TO .
WRITE W_AFKO-GAMNG TO .
L_LINESUM = L_LINESUM + W_AFKO-GAMNG.
L_SUM = L_SUM + W_AFKO-GAMNG.
ENDIF.
CLEAR L_II.
CLEAR L_N.
DO V_DATE TIMES.
L_N = L_N + 1.
L_II = L_II + 1.
IF L_SDATE = L_DATUM.
IF P_CHKBOX = 'X'.
CLEAR W_LINE.
READ TABLE I_LINE INTO W_LINE
WITH KEY DATUM = L_DATUM
VERID = W_AFKO-VERID+3(1).
L_C = W_LINE-LDATA.
ELSE.
L_C = L_DATUM.
ENDIF.
IF L_C SPACE.
ASSIGN COMPONENT L_C OF STRUCTURE TO .
WRITE W_AFKO-GAMNG TO .
L_LINESUM = L_LINESUM + W_AFKO-GAMNG.
CLEAR W_SUM.
W_SUM-NUM = L_C.
W_SUM-MENGE = W_AFKO-GAMNG.
APPEND W_SUM TO I_SUM.
ENDIF.
ENDIF.
L_DATUM = L_DATUM + 1.
ENDDO.
ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE TO .
WRITE L_LINESUM TO .
APPEND TO .
CLEAR .
ENDLOOP.
* PLANNED ORDER
ASSIGN COMPONENT 'ORDER' OF STRUCTURE TO .
= TEXT-T02.
ASSIGN COMPONENT 'PRODVER' OF STRUCTURE TO .
= W_AFKOBAK-VERID.
CLEAR L_II.
L_DATUM = S_DATE-LOW.
LOOP AT I_PLAF INTO W_PLAF WHERE MDV01 = W_AFKOBAK-MDV01
AND VERID = W_AFKOBAK-VERID
AND MATNR = W_AFKOBAK-PLNBEZ.
IF P_START = 'X'.
L_SDATE = W_PLAF-PSTTR.
ELSE.
L_SDATE = W_PLAF-PEDTR.
ENDIF.
IF L_SDATE 0.
ASSIGN COMPONENT 'OVERDUE' OF STRUCTURE TO .
WRITE L_SUMSUM TO .
ENDIF.
L_LINESUM = L_LINESUM + L_SUMSUM.
CLEAR L_SUMSUM.
CLEAR L_N.
DO V_DATE TIMES.
L_II = L_II + 1.
L_N = L_N + 1.
LOOP AT I_PLAF INTO W_PLAF WHERE MDV01 = W_AFKOBAK-MDV01
AND VERID = W_AFKOBAK-VERID
AND MATNR = W_AFKOBAK-PLNBEZ.
IF P_START = 'X'.
L_SDATE = W_PLAF-PSTTR.
ELSE.
L_SDATE = W_PLAF-PEDTR.
ENDIF.
IF L_SDATE = L_DATUM.
L_SUMSUM = L_SUMSUM + W_PLAF-GSMNG.
ENDIF.
ENDLOOP.
IF P_CHKBOX = 'X'.
CLEAR W_LINE.
READ TABLE I_LINE INTO W_LINE
WITH KEY DATUM = L_DATUM
VERID = W_AFKO-VERID+3(1).
L_C = W_LINE-LDATA.
ELSE.
L_C = L_DATUM.
ENDIF.
IF L_C SPACE.
IF L_SUMSUM > 0.
ASSIGN COMPONENT L_C OF STRUCTURE TO .
WRITE L_SUMSUM TO .
ENDIF.
L_LINESUM = L_LINESUM + L_SUMSUM.
ENDIF.
L_DATUM = L_DATUM + 1.
CLEAR W_SUM.
W_SUM-NUM = L_C.
W_SUM-MENGE = L_SUMSUM.
APPEND W_SUM TO I_SUM.
CLEAR L_SUMSUM.
ENDDO.
ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE TO .
WRITE L_LINESUM TO .
APPEND TO .
CLEAR .
*LINE TOTAL
AT END OF MDV01.
DELETE I_LINE WHERE DATUM = SPACE
AND VERID = SPACE.
ASSIGN COMPONENT 'PRODU' OF STRUCTURE TO .
= TEXT-T03.
IF L_SUM > 0.
ASSIGN COMPONENT 'OVERDUE' OF STRUCTURE TO .
WRITE L_SUM TO .
ENDIF.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE TO .
= 'C700'.
CLEAR L_DATUM.
SORT I_SUM BY NUM.
LOOP AT I_LINE INTO W_LINE.
CLEAR L_SUMLINE.
LOOP AT I_SUM INTO W_SUM WHERE NUM = W_LINE-LDATA.
L_SUMLINE = L_SUMLINE + W_SUM-MENGE.
ENDLOOP.
L_SUMSUM = L_SUMSUM + L_SUMLINE.
IF W_LINE-LDATA SPACE.
IF L_SUMLINE > 0.
ASSIGN COMPONENT W_LINE-LDATA OF STRUCTURE TO .
WRITE L_SUMLINE TO .
ENDIF.
ENDIF.
ENDLOOP.
L_SUMSUM = L_SUMSUM + L_SUM.
ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE TO .
WRITE L_SUMSUM TO .
CLEAR L_SUMSUM .
APPEND TO .
CLEAR .
CLEAR I_SUM[].
CLEAR L_SUM.
ENDAT.
L_MDV01 = W_AFKOBAK-MDV01.
L_VERID = W_AFKOBAK-VERID.
ENDLOOP.
*NO-LINE
CLEAR L_SUMSUM.
CLEAR:L_MDV01_1,L_VERID_1,L_MATNR_1.
LOOP AT I_AFKO INTO W_AFKO
WHERE MDV01 = SPACE OR VERID = SPACE.
IF SY-TABIX = 1.
ASSIGN COMPONENT 'PRODU' OF STRUCTURE TO .
= TEXT-T04.
APPEND TO .
CLEAR .
ENDIF.
ASSIGN COMPONENT 'PRODU' OF STRUCTURE TO .
= W_AFKO-PLNBEZ.
ASSIGN COMPONENT 'ORDER' OF STRUCTURE TO .
= W_AFKO-AUFNR.
ASSIGN COMPONENT 'PRODVER' OF STRUCTURE TO .
= W_AFKO-VERID.
IF P_START = 'X'.
L_SDATE = W_AFKO-GSTRS.
ELSE.
L_SDATE = W_AFKO-GLTRS.
ENDIF.
L_DATUM = S_DATE-LOW.
IF L_SDATE TO .
WRITE W_AFKO-GAMNG TO .
L_SUMSUM = L_SUMSUM + W_AFKO-GAMNG.
ENDIF.
CLEAR L_N.
DO V_DATE TIMES.
L_N = L_N + 1.
IF L_SDATE = L_DATUM.
IF P_CHKBOX = 'X'.
CLEAR W_LINE.
READ TABLE I_LINE INTO W_LINE
WITH KEY DATUM = L_DATUM
VERID = W_AFKO-VERID+3(1).
L_C = W_LINE-LDATA.
ELSE.
L_C = L_DATUM.
ENDIF.
IF L_C SPACE.
ASSIGN COMPONENT L_C OF STRUCTURE TO .
WRITE W_AFKO-GAMNG TO .
L_SUMSUM = L_SUMSUM + W_AFKO-GAMNG.
ENDIF.
ENDIF.
L_DATUM = L_DATUM + 1.
ENDDO.
ASSIGN COMPONENT 'ACCMQTY' OF STRUCTURE TO .
WRITE L_SUMSUM TO .
APPEND TO .
CLEAR .
L_MDV01_1 = W_AFKO-MDV01.
L_VERID_1 = W_AFKO-VERID.
L_MATNR_1 = W_AFKO-PLNBEZ.
ENDLOOP.
ENDFORM. " FRM_TABLE_CREATE
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TABLE.
DATA: NEW_TABLE TYPE REF TO DATA,
NEW_LINE TYPE REF TO DATA.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FIELDCAT
IMPORTING
EP_TABLE = NEW_TABLE.
ASSIGN NEW_TABLE->* TO .
CREATE DATA NEW_LINE LIKE LINE OF .
ASSIGN NEW_LINE->* TO .
ENDFORM. " FRM_CREATE_TABLE
*&---------------------------------------------------------------------*
*& Form FRM_VALUE_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* 31
L_DATUM = S_DATE-LOW + 31.
IF S_DATE-HIGH > L_DATUM.
SET CURSOR FIELD 'S_DATE-HIGH'.
MESSAGE E021(ZP001).
ENDIF.
* check production line is space
IF NOT S_P_LIN[] IS INITIAL.
L_1 = '3'.
ENDIF.
* check material master is space
IF NOT S_M_MAS[] IS INITIAL.
L_2 = '4'.
ENDIF.
* check mrp controller is space
IF NOT S_MRP_C[] IS INITIAL.
L_3 = '5'.
ENDIF.
* Condition check
READ TABLE I_DEFULT INTO W_DEFULT
WITH KEY PLANT = '1'
DATE = '2'
PRODU = L_1
MATNR = L_2
MRP = L_3.
IF SY-SUBRC 0.
MESSAGE E022(ZP001).
ELSE.
V_NUM = W_DEFULT-NUM.
ENDIF.
ENDFORM. " FRM_VALUE_CHECK
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/32493/showart_251626.html |
|