*&*************************************************************************
*& REPORT ZMM_STORAGEBIN_UPLOAD
*&************************************************************************
* PROGRAM TITLE : STORAGE BIN UPDATION FOR EXISTING MATERIAL MASTER
* DESCRIPTION : MASS
UPLOAD/UPDATE STORAGE BIN FOR EXISTING MATERIAL MASTER.
*& REPORT ZMM_STORAGEBIN_UPLOAD
*&************************************************************************
* PROGRAM TITLE
* DESCRIPTION
REPORT ZMM_STORAGEBIN_UPLOAD
NO STANDARD PAGE HEADING LINE-SIZE 255.
* DATA DECLARATION
TABLES: MARA, MARD.
TYPES: BEGIN OF IT_DATA,
MATNR TYPE MARA-MATNR,
WERKS TYPE MARD-WERKS,
LGORT TYPE MARD-LGORT,
LGPBE TYPE MARD-LGPBE,
* ERR_MSG( 73) TYPE C,
END OF IT_DATA.
DATA : BEGIN OF I_ERR OCCURS 0,
MSGTYP( 1),
W_MSG( 60),
END OF I_ERR .
DATA: LT_FILE TYPE STANDARD TABLE OF IT_DATA.
DATA: LT_ALSMEX_TABLINE TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: WA_FILE TYPE IT_DATA.
DATA: IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE.
DATA: LT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: WRK_BDCDATA TYPE BDCDATA.
DATA: V_FILE TYPE STRING .
DATA: L_MSTRING( 480).
DATA: LV_MODE TYPE C VALUE 'N'.
DATA: LV_UPDATE TYPE C VALUE 'S'.
DATA: W_ERR LIKE I_ERR.
DATA: NUM TYPE I,
L_FILENAME TYPE STRING,
V_TOTAL TYPE I,
V_S TYPE I,
V_F TYPE I.
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME OBLIGATORY,
P_MODE TYPE CTU_MODE DEFAULT 'N'..
SELECTION-SCREEN: END OF BLOCK BLK1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FILE.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 4
I_END_ROW = 2000
TABLES
INTERN = LT_ALSMEX_TABLINE
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC = 0.
SORT LT_ALSMEX_TABLINE BYROW COL .
LOOP AT LT_ALSMEX_TABLINE .
CASE LT_ALSMEX_TABLINE-COL.
WHEN '0001'. "MATERIAL NUMBER
WA_FILE-MATNR = LT_ALSMEX_TABLINE-VALUE.
WHEN '0002'. "PLANT
WA_FILE-WERKS = LT_ALSMEX_TABLINE-VALUE.
WHEN '0003'. "STORAGE LOCATION
WA_FILE-LGORT = LT_ALSMEX_TABLINE-VALUE.
WHEN '0004'. "STORAGE BIN
WA_FILE-LGPBE = LT_ALSMEX_TABLINE-VALUE.
ENDCASE.
AT END OF ROW.
APPEND WA_FILE TO LT_FILE.
CLEAR: WA_FILE.
ENDAT.
ENDLOOP.
ELSE.
MESSAGE 'INVALID INPUT FILE' TYPE 'S'.
EXIT.
ENDIF.
DESCRIBE TABLE LT_FILE LINES V_TOTAL.
CLEAR : V_F, V_S.
V_F = 0.
V_S = 0.
*INCLUDE BDCRECX1.
*
*START-OF-SELECTION.
*PERFORM OPEN_GROUP.
LOOP AT LT_FILE INTO WA_FILE.
CLEAR: IT_BDCDATA[ ].
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RMMG1-MATNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=AUSW'.
PERFORM BDC_FIELD USING 'RMMG1-MATNR'
WA_FILE-MATNR.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT( 12)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL( 12)'
'X'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0080'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RMMG1-LGORT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'RMMG1-WERKS'
WA_FILE-WERKS.
PERFORM BDC_FIELD USING 'RMMG1-LGORT'
WA_FILE-LGORT.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MARD-LGPBE'.
PERFORM BDC_FIELD USING 'MARD-LGPBE'
WA_FILE-LGPBE.
CALL TRANSACTION 'MM02' USING IT_BDCDATA[ ]
MODE P_MODE UPDATE LV_UPDATE
MESSAGES INTO LT_MESSTAB.
CLEAR: I_ERR ,W_ERR.
LOOP AT LT_MESSTAB .
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = LT_MESSTAB-MSGID
LANG = 'EN'
NO = LT_MESSTAB-MSGNR
V1 = LT_MESSTAB-MSGV1
V2 = LT_MESSTAB-MSGV2
V3 = LT_MESSTAB-MSGV3
V4 = LT_MESSTAB-MSGV4
IMPORTING
MSG = W_ERR-W_MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
APPEND W_ERR TO I_ERR.
CLEAR W_ERR.
ENDLOOP.
CLEAR LT_MESSTAB.
REFRESH LT_MESSTAB.
ENDLOOP.
***********
CLEAR : V_F, V_S.
V_F = 0.
V_S = 0.
WRITE: / 'SUMMARY:' COLOR COL_HEADING.
WRITE: / 'TOTAL NUMBER RECORDS PROCESSED:', V_TOTAL.
WRITE: / 'TOTAL NUMBER RECORDS SUCCESS : ' , V_S.
WRITE: / 'TOTAL NUMBER RECORDS ERROR : ', V_F.
WRITE: /.
WRITE: /.
WRITE: /.
WRITE: / 'DETAILS:' COLOR COL_HEADING.
LOOP AT I_ERR INTO W_ERR .
IF W_ERR-MSGTYP = 'E'.
V_F = V_F + 1.
ELSEIF W_ERR-MSGTYP = 'S'.
V_S = V_S + 1.
ENDIF.
IF SY-TABIX = 1.
NUM = 1.
ELSE.
NUM = NUM + 1.
ENDIF.
IF W_ERR-MSGTYP = 'E'.
WRITE: / NUM , W_ERR-W_MSG COLOR 6.
ELSE.
WRITE: / NUM , W_ERR-W_MSG COLOR 5 .
ENDIF.
CLEAR W_ERR.
ENDLOOP.
***********
FORM BDC_DYNPRO USING P_PROGRAM
P_DYNPRO.
* CLEAR THE WORK AREA
CLEAR WRK_BDCDATA.
* POPULATE WORK AREA WITH PROGRAM, SCREEN AND 'X'
* IN CASE ITS A NEW SCREEN
WRK_BDCDATA-PROGRAM = P_PROGRAM.
WRK_BDCDATA-DYNPRO = P_DYNPRO.
WRK_BDCDATA-DYNBEGIN = 'X'.
APPEND WRK_BDCDATA TO IT_BDCDATA.
ENDFORM. " BDC_DYNPRO
FORM BDC_FIELD USING P_FIELD
P_VALUE.
* CLEAR THE WORK AREA
CLEAR WRK_BDCDATA.
* POPULATE DATA INTO WORK AREA
MOVE P_FIELD TO WRK_BDCDATA-FNAM.
* WRITE P_VALUE TO WRK_BDCDATA-FVAL LEFT-JUSTIFIED.
MOVE P_VALUE TO WRK_BDCDATA-FVAL. "LEFT-JUSTIFIED.
* APPEND TO INTERNAL TABLE
* IF WRK_BDCDATA-FVAL( 1) = '*'.
* WRK_BDCDATA-FVAL = P_VALUE.
* ENDIF.
APPEND WRK_BDCDATA TO IT_BDCDATA.
ENDFORM. " BDC_FIELD
NO STANDARD PAGE HEADING LINE-SIZE 255.
* DATA DECLARATION
TABLES: MARA
TYPES: BEGIN OF IT_DATA,
MATNR TYPE MARA-MATNR,
WERKS TYPE MARD-WERKS,
LGORT TYPE MARD-LGORT,
LGPBE TYPE MARD-LGPBE,
* ERR_MSG
END OF IT_DATA.
DATA : BEGIN OF I_ERR OCCURS 0,
MSGTYP
W_MSG
END OF I_ERR .
DATA: LT_FILE TYPE STANDARD TABLE OF IT_DATA.
DATA: LT_ALSMEX_TABLINE TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: WA_FILE TYPE IT_DATA.
DATA: IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE.
DATA: LT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: WRK_BDCDATA TYPE BDCDATA.
DATA: V_FILE TYPE STRING .
DATA: L_MSTRING
DATA: LV_MODE TYPE C VALUE 'N'.
DATA: LV_UPDATE TYPE C VALUE 'S'.
DATA: W_ERR LIKE I_ERR.
DATA: NUM TYPE I,
L_FILENAME TYPE STRING,
V_TOTAL TYPE I,
V_S TYPE I,
V_F TYPE I.
SELECTION-SCREEN
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME OBLIGATORY,
P_MODE TYPE CTU_MODE DEFAULT 'N'..
SELECTION-SCREEN
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FILE.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 4
I_END_ROW = 2000
TABLES
INTERN = LT_ALSMEX_TABLINE
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC = 0.
SORT LT_ALSMEX_TABLINE BY
LOOP AT LT_ALSMEX_TABLINE .
CASE LT_ALSMEX_TABLINE-COL.
WHEN '0001'. "MATERIAL NUMBER
WA_FILE-MATNR = LT_ALSMEX_TABLINE-VALUE.
WHEN '0002'. "PLANT
WA_FILE-WERKS = LT_ALSMEX_TABLINE-VALUE.
WHEN '0003'. "STORAGE LOCATION
WA_FILE-LGORT = LT_ALSMEX_TABLINE-VALUE.
WHEN '0004'. "STORAGE BIN
WA_FILE-LGPBE = LT_ALSMEX_TABLINE-VALUE.
ENDCASE.
AT END OF ROW.
APPEND WA_FILE TO LT_FILE.
CLEAR: WA_FILE.
ENDAT.
ENDLOOP.
ELSE.
MESSAGE 'INVALID INPUT FILE' TYPE 'S'.
EXIT.
ENDIF.
DESCRIBE TABLE LT_FILE LINES V_TOTAL.
CLEAR : V_F
V_F = 0.
V_S = 0.
*INCLUDE BDCRECX1.
*
*START-OF-SELECTION.
*PERFORM OPEN_GROUP.
LOOP AT LT_FILE INTO WA_FILE.
CLEAR: IT_BDCDATA
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RMMG1-MATNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=AUSW'.
PERFORM BDC_FIELD USING 'RMMG1-MATNR'
WA_FILE-MATNR.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL
'X'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0080'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RMMG1-LGORT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'RMMG1-WERKS'
WA_FILE-WERKS.
PERFORM BDC_FIELD USING 'RMMG1-LGORT'
WA_FILE-LGORT.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MARD-LGPBE'.
PERFORM BDC_FIELD USING 'MARD-LGPBE'
WA_FILE-LGPBE.
CALL TRANSACTION 'MM02' USING IT_BDCDATA
MODE P_MODE UPDATE LV_UPDATE
MESSAGES INTO LT_MESSTAB.
CLEAR: I_ERR ,W_ERR.
LOOP AT LT_MESSTAB .
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = LT_MESSTAB-MSGID
LANG = 'EN'
NO = LT_MESSTAB-MSGNR
V1 = LT_MESSTAB-MSGV1
V2 = LT_MESSTAB-MSGV2
V3 = LT_MESSTAB-MSGV3
V4 = LT_MESSTAB-MSGV4
IMPORTING
MSG = W_ERR-W_MSG
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
APPEND W_ERR TO I_ERR.
CLEAR W_ERR.
ENDLOOP.
CLEAR LT_MESSTAB.
REFRESH LT_MESSTAB.
ENDLOOP.
***********
CLEAR : V_F
V_F = 0.
V_S = 0.
WRITE
WRITE
WRITE
WRITE
WRITE
WRITE
WRITE
WRITE
LOOP AT I_ERR INTO W_ERR .
IF W_ERR-MSGTYP = 'E'.
V_F = V_F + 1.
ELSEIF W_ERR-MSGTYP = 'S'.
V_S = V_S + 1.
ENDIF.
IF SY-TABIX = 1.
NUM = 1.
ELSE.
NUM = NUM + 1.
ENDIF.
IF W_ERR-MSGTYP = 'E'.
WRITE
ELSE.
WRITE
ENDIF.
CLEAR W_ERR.
ENDLOOP.
***********
FORM BDC_DYNPRO USING P_PROGRAM
P_DYNPRO.
* CLEAR THE WORK AREA
CLEAR WRK_BDCDATA.
* POPULATE WORK AREA WITH PROGRAM, SCREEN AND 'X'
* IN CASE ITS A NEW SCREEN
WRK_BDCDATA-PROGRAM = P_PROGRAM.
WRK_BDCDATA-DYNPRO = P_DYNPRO.
WRK_BDCDATA-DYNBEGIN = 'X'.
APPEND WRK_BDCDATA TO IT_BDCDATA.
ENDFORM. " BDC_DYNPRO
FORM BDC_FIELD USING P_FIELD
P_VALUE.
* CLEAR THE WORK AREA
CLEAR WRK_BDCDATA.
* POPULATE DATA INTO WORK AREA
MOVE P_FIELD TO WRK_BDCDATA-FNAM.
* WRITE P_VALUE TO WRK_BDCDATA-FVAL LEFT-JUSTIFIED.
MOVE P_VALUE TO WRK_BDCDATA-FVAL. "LEFT-JUSTIFIED.
* APPEND TO INTERNAL TABLE
* IF WRK_BDCDATA-FVAL
* WRK_BDCDATA-FVAL = P_VALUE.
* ENDIF.
APPEND WRK_BDCDATA TO IT_BDCDATA.
ENDFORM. " BDC_FIELD
No comments:
Post a Comment