ZSD PP BDC Report PDF
ZSD PP BDC Report PDF
*--------------------------------------------------------------------------------*
* D A T A D E C L A R A T I O N *
*--------------------------------------------------------------------------------*
TYPE-POOLS: slis.
DATA:
wa_final TYPE ty_final,
wa_vbak_vbap TYPE ty_vbak_vbap,
wa_mska TYPE ty_mska,
wa_vbap TYPE vbap,
wa_mbew TYPE mbew,
wa_mard TYPE mard,
wa_mchb TYPE mchb,
wa_mcha TYPE mcha,
s_mard TYPE mard,
zwa TYPE zstock_test,
wa_tab TYPE w_tab,
wa_tab1 TYPE w_tab,
wa_marc TYPE marc,
it_tab TYPE TABLE OF w_tab,
it_tab1 LIKE TABLE OF wa_tab,
ztab TYPE TABLE OF zstock_test,
it_vbap TYPE TABLE OF vbap,
* it_mard TYPE TABLE OF mard,
it_mbew TYPE TABLE OF mbew,
DATA:
wa_fcat TYPE slis_fieldcat_alv,
wa_bdcdata TYPE bdcdata,
wa_bdcmsgcoll TYPE bdcmsgcoll,
wa_layout TYPE slis_layout_alv,
DATA :
v_msg(100) TYPE c,
lin TYPE string,
count TYPE i,
budat TYPE budat,
datuv TYPE datuv, " Added by YASH: Madhuri Anmal 17.08.2018.
item_count(2) TYPE n, " For Dynamic Tab,
lv_count(2) TYPE n, " For Dynamic Tab,
temp(40) .
*--------------------------------------------------------------------------------*
* S E L E C T I O N S C R E E N E L E M E N T S *
*--------------------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS :
s_vbeln FOR wa_vbak_vbap-vbeln, "OBLIGATORY, " Sales document Number.
s_auart FOR wa_vbak_vbap-auart, "OBLIGATORY, " Sales document Type.
s_audat FOR wa_vbak_vbap-audat OBLIGATORY, " Sales document date.
s_werks FOR wa_vbak_vbap-werks_i OBLIGATORY. " Plant.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS :
p_rb1 RADIOBUTTON GROUP rg1 " Radio button for stock reservation
DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(20) FOR FIELD p_rb1.
PARAMETERS :
p_rb2 RADIOBUTTON GROUP rg1. " Radio button for MRP Run.
SELECTION-SCREEN COMMENT 30(20) FOR FIELD p_rb2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
*--------------------------------------------------------------------------------*
* I N I T I A L I Z A T I O N *
*--------------------------------------------------------------------------------*
INITIALIZATION.
PERFORM f_clear_refresh.
*--------------------------------------------------------------------------------*
* S T A R T - O F - S E L E C T I O N *
*--------------------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_get_data. " Fetch data from the database.
PERFORM f_process_data. " Caluculate remaining quantity.
*--------------------------------------------------------------------------------*
* E N D - O F - S E L E C T I O N *
*--------------------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM prepare_fieldcat. " Build field catalog.
PERFORM prepare_layout.
PERFORM alv_list_display. " Dispaly report.
*&---------------------------------------------------------------------*
*& Form F_CLEAR_REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_clear_refresh .
CLEAR:
wa_final,
wa_vbak_vbap ,
wa_mska,
wa_fcat,
wa_layout,
wa_bdcdata,
wa_vbap,
wa_mbew,
wa_mard,
wa_mchb,
wa_mcha,
wa_marc,
s_mard ,
zwa,
wa_tab,
wa_tab1,
wa_bdcmsgcoll,
v_msg,
lin,
count,
budat,
item_count,
temp.
REFRESH:
it_final,
it_vbak_vbap ,
it_mska ,
it_fcat,
it_fcat1,
it_bdcdata,
it_tab,
it_tab1,
ztab,
it_vbap,
* it_mard,
it_mbew,
it_error,
it_bdcmsgcoll.
IF sy-subrc = 0.
SORT it_mska BY matnr werks vbeln posnr.
ENDIF.
IF sy-subrc = 0.
SORT it_marc BY matnr werks.
ENDIF.
ELSE.
MESSAGE text-011 TYPE gc_e. " 'No data found'(011)
ENDIF. " End of 'IF it_vbak_vbap'.
ENDFORM. " End of 'f_get_data'
*&---------------------------------------------------------------------*
*& Form F_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_process_data .
DATA : lv_index TYPE sy-tabix. " Added by YASH : Madhuri Anmal 23.08.2018.
CLEAR : lv_index.
ELSE.
wa_final-kalab = wa_final-kalab + wa_mska-kalab.
ENDIF. " End of 'IF wa_mska-matnr'.
ENDLOOP. " End of 'LOOP AT it_mska'.
*---Start: Added by YASH : Madhuri Anmal 22.08.2018.
ENDIF.
wa_final-rmqty = wa_final-kwmeng - wa_final-kalab. "Calculate remaining quantity
IF p_rb1 = gc_x AND wa_final-kwmeng GT 0 AND wa_final-rmqty GT 0.
APPEND wa_final TO it_final.
ELSEIF p_rb2 = gc_x AND wa_final-rmqty GT 0.
APPEND wa_final TO it_final.
ENDIF. " End of 'IF p_rb1 = gc_x '.
CLEAR: wa_final, wa_vbak_vbap, wa_mska.
wa_fcat-fieldname = 'AUART'.
wa_fcat-seltext_m = text-003. "'Sales Document Type '.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'AUDAT'.
wa_fcat-seltext_m = text-004. "'Sales Document Date '.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'POSNR'.
wa_fcat-seltext_m = text-005. "'Item number'.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'MATNR'.
wa_fcat-seltext_m = text-006. "'Material Code'.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'WERKS'.
wa_fcat-seltext_m = text-007. "'Plant'.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'KWMENG'.
wa_fcat-seltext_m = text-008. "'Order Quantity'.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'KALAB'.
wa_fcat-seltext_m = text-009. "'Reserved Quantity'.
APPEND wa_fcat TO it_fcat.
wa_fcat-fieldname = 'RMQTY'.
wa_fcat-seltext_m = text-010. "'Remaining Quantity'.
APPEND wa_fcat TO it_fcat.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepare_layout .
wa_layout-colwidth_optimize = 'X'.
ENDFORM. " End of 'prepare_layout'
*&---------------------------------------------------------------------*
*& Form ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
* Pass data and field catalog to ALV function module to display
* ALV list.
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_list_display .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*&---------------------------------------------------------------------*
*& Form BDC_MD50
*&---------------------------------------------------------------------*
* BDC for transaction MD50
*----------------------------------------------------------------------*
FORM bdc_md50.
CONSTANTS : lc_1 TYPE c VALUE '1',
lc_3 TYPE c VALUE '3'.
LOOP AT it_final INTO wa_final.
REFRESH it_bdcdata.
PERFORM bdc_dynpro USING 'SAPMM61X' '0160'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RM61X-KDAUF'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RM61X-KDAUF' wa_final-vbeln.
PERFORM bdc_field USING 'RM61X-KDPOS' wa_final-posnr.
PERFORM bdc_field USING 'RM61X-BANER' lc_1.
PERFORM bdc_field USING 'RM61X-LIFKZ' lc_3.
PERFORM bdc_field USING 'RM61X-PLMOD' lc_1.
PERFORM bdc_field USING 'RM61X-TRMPL' lc_1.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc EQ 0.
count = count + 1.
it_error-record = count.
it_error-matnr = wa_final-matnr.
* it_error-message = v_msg.
IF v_msg CS text-013. "'posted'.
* MOVE WA_TAB1-VBELN TO ZWA-VBELN.
* MOVE WA_TAB1-POSNR TO ZWA-VBELP.
* MOVE WA_TAB1-MATNR TO ZWA-MATNR.
* MOVE WA_TAB1-WERKS TO ZWA-WERKS.
* MOVE WA_TAB1-LGORT TO ZWA-LGORT.
* MOVE WA_TAB1-ERFMG TO ZWA-MENGE.
* ZWA-FLAG = '9'.
* INSERT ZSTOCK_TEST FROM ZWA.
ELSEIF v_msg CS text-014. "'Please check input parameters'.
v_msg = text-015. "' MRP Run Successful.'
it_error-message = v_msg.
ENDIF.
APPEND it_error.
ENDIF.
ENDLOOP.
REFRESH it_bdcmsgcoll.
CLEAR : wa_final.
ENDLOOP.
ENDFORM. " End of 'bdc_md50'
FORM bdc_mb1b.
* DATA : li_sel TYPE TABLE OF rsparams,
* lwa_sel TYPE rsparams.
* ENDAT.
ENDLOOP. " End of 'LOOP AT it_final INTO wa_final'
ENDFORM. " End of 'bdc_mb1b'
*&---------------------------------------------------------------------*
*& Form USER_COMND
*&---------------------------------------------------------------------*
FORM user_comnd USING p_ucomm TYPE sy-ucomm
p_selfiels TYPE slis_selfield.
CASE p_ucomm.
WHEN '&SAVE' .
IF p_rb1 = gc_x.
PERFORM bdc_mb1b.
PERFORM process_errors.
ELSEIF p_rb2 = gc_x.
PERFORM bdc_md50.
PERFORM process_errors.
ENDIF.
WHEN '&F03'.
LEAVE SCREEN.
WHEN OTHERS.
ENDCASE.
ENDFORM. " End of 'user_comnd'
*&---------------------------------------------------------------------*
*& Form SET_STATUS
*&---------------------------------------------------------------------*
FORM set_status USING rt_extab TYPE slis_t_extab .
SET PF-STATUS 'ZSTANDARD_STATUS'.
ENDFORM. " End of 'set_status'
*&---------------------------------------------------------------------*
*& Form PROCESS_ERRORS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_errors .
REFRESH it_fcat1.
CLEAR wa_fcat.
wa_fcat-fieldname = 'RECORD'.
wa_fcat-seltext_m = 'S.NO.'.
wa_fcat-outputlen = '5'.
APPEND wa_fcat TO it_fcat1.
CLEAR wa_fcat.
wa_fcat-fieldname = 'MATNR'.
wa_fcat-seltext_m = 'MATERIAL NO.'.
wa_fcat-outputlen = '30'.
APPEND wa_fcat TO it_fcat1.
CLEAR wa_fcat.
wa_fcat-fieldname = 'VBELN'.
wa_fcat-seltext_m = 'Sales Document No.'.
wa_fcat-outputlen = '20'.
APPEND wa_fcat TO it_fcat1.
CLEAR wa_fcat.
wa_fcat-fieldname = 'MESSAGE'.
wa_fcat-seltext_m = 'STATUS'.
wa_fcat-outputlen = '100'.
APPEND wa_fcat TO it_fcat1.
*&---------------------------------------------------------------------*
*& Form PROCESS_MB1B
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_mb1b USING fp_vbeln TYPE any.
DATA : s_flag TYPE char1 VALUE '0',
lv_qty TYPE mard-labst,
lv_txt_vbeln TYPE string,
lv_txt_matnr TYPE string,
result TYPE string,
lv_pstqty TYPE mchb-clabs. " Added by YASH : Madhuri Anmal 28.08.2018.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = fp_vbeln
IMPORTING
output = fp_vbeln.
IF NOT fp_vbeln IS INITIAL.
SELECT * FROM vbap INTO TABLE it_vbap
WHERE vbeln = fp_vbeln
AND posnr = wa_final-posnr.
IF wa_tab-werks = '1200'.
wa_tab-lgort = '1201'.
ELSEIF wa_tab-werks = '1100'.
wa_tab-lgort = '1101'.
ELSEIF wa_tab-werks = '1300'.
wa_tab-lgort = '1301'.
ELSE.
MESSAGE text-012 TYPE 'E'. " 'Storage location not found'.
ENDIF. " End of IF wa_tab-werks = '1200'.
PERFORM check_stock.
wa_tab-erfmg = wa_vbap-kwmeng.
CLEAR zwa.
SELECT SINGLE * FROM zstock_test INTO zwa
WHERE vbeln = wa_vbap-vbeln
AND vbelp = wa_vbap-posnr
AND matnr = wa_vbap-matnr.
IF sy-subrc = 0.
IF zwa-flag = '9' AND wa_vbap-kwmeng EQ 0.
s_flag = '9'. " Changed by YASH: Madhuri Anmal 17.08.2018.
ELSE.
s_flag = '0'. " Changed by YASH: Madhuri Anmal 17.08.2018.
ENDIF.
ENDIF. " End of 'IF sy-subrc = 0.'
wa_tab-kdauf = wa_vbap-vbeln.
wa_tab-kdpos = wa_vbap-posnr.
CLEAR wa_mcha.
SELECT SINGLE * FROM mcha INTO wa_mcha
WHERE matnr = wa_tab-matnr
AND werks = wa_tab-werks
AND laeda <> 0.
wa_tab-charg = wa_mcha-charg.
CLEAR s_mard.
SELECT SINGLE * FROM mard INTO s_mard
WHERE matnr = wa_tab-matnr
AND werks = wa_tab-werks
AND lgort = wa_tab-lgort.
IF sy-subrc = 0.
IF s_mard-labst = 0.
count = count + 1.
it_error-record = count.
it_error-matnr = wa_tab-matnr.
it_error-vbeln = wa_tab-vbeln.
MOVE 'Unrestricted qty is 0.00' TO v_msg.
it_error-message = v_msg.
APPEND it_error.
CLEAR it_error.
CLEAR wa_tab.
ELSE.
IF s_flag <> '9'.
APPEND wa_tab TO it_tab.
ENDIF.
CLEAR wa_tab.
ENDIF. " End of 'IF s_mard-labst = 0'.
ELSE.
CLEAR wa_tab.
ENDIF. " End of 'IF sy-subrc = 0.'.
CLEAR: s_flag, s_mard,wa_mcha,zwa.
ENDLOOP. " End of 'LOOP AT it_vbap INTO wa_vbap'.
ENDIF. " End of 'IF it_vbap[] IS NOT INITIAL.'.
it_tab1[] = it_tab[].
ENDIF. " End of 'IF NOT fp_vbeln IS INITIAL'.
CLEAR temp.
item_count = 1.
SELECT matnr
werks
lgort
charg
clabs
FROM mchb
INTO TABLE it_mchb
WHERE matnr EQ wa_mard-matnr
AND werks EQ wa_mard-werks
AND lgort EQ wa_mard-lgort.
* lv_count = sy-tabix.
CLEAR temp.
CONCATENATE 'MSEG-MATNR(' lv_count ')' INTO temp.
IF wa_marc-sernp EQ '0001'.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = sy-datum
IMPORTING
date_external = wa_tab1-datuv
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " End of 'IF sy-subrc <> 0'.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = sy-datum
IMPORTING
date_external = wa_tab1-datub
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " End of 'IF sy-subrc <> 0'.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
ELSE.
CLEAR wa_mchb1.
EXIT.
ENDIF.
CLEAR wa_mchb1.
ENDLOOP.
CLEAR lv_count.
ENDIF.
ENDIF.
IF sy-subrc EQ 0.
count = count + 1.
it_error-record = count.
it_error-matnr = wa_tab1-matnr.
it_error-vbeln = wa_tab1-vbeln.
it_error-message = v_msg.
IF v_msg CS 'posted'.
*---------Start: Added by YASH: Madhuri Anmal 17.08.2018.
CLEAR lv_qty.
lv_qty = wa_tab1-erfmg - wa_final-rmqty.
IF lv_qty = 0.
*---------End: Added by YASH: Madhuri Anmal 17.08.2018.
MOVE wa_tab1-vbeln TO zwa-vbeln.
MOVE wa_tab1-posnr TO zwa-vbelp.
MOVE wa_tab1-matnr TO zwa-matnr.
MOVE wa_tab1-werks TO zwa-werks.
MOVE wa_tab1-lgort TO zwa-lgort.
MOVE wa_tab1-erfmg TO zwa-menge.
zwa-flag = '9'.
INSERT zstock_test FROM zwa.
ENDIF. " Added by YASH: Madhuri Anmal 17.08.2018.
ENDIF. " End of 'IF v_msg CS 'posted'
APPEND it_error.
ENDIF. " End of 'IF sy-subrc EQ 0'
*&---------------------------------------------------------------------*
*& Form CHECK_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_stock .