0% found this document useful (0 votes)
175 views18 pages

ZSD PP BDC Report PDF

This report provides sales order planning and transfer posting information. It allows the user to select sales documents by number, type, date and plant. It then fetches the relevant data from the database, calculates remaining quantities, and displays the results in an ALV grid for analysis. The report was created by Madhuri Anmal for sales order and production planning, and specifications were provided by Ravi Kumar Sathani.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
175 views18 pages

ZSD PP BDC Report PDF

This report provides sales order planning and transfer posting information. It allows the user to select sales documents by number, type, date and plant. It then fetches the relevant data from the database, calculates remaining quantities, and displays the results in an ALV grid for analysis. The report was created by Madhuri Anmal for sales order and production planning, and specifications were provided by Ravi Kumar Sathani.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

**********************************************************************************

* Program name : ZSD_PP_BDC_REPORT *


* Date : 27 July 2018. *
* Author : Madhuri Anmal(ABAP). *
* Type : 1 *
* Application : SD and PP *
* Purpose : Report on sales order planning (t-code : MD50) and transfer posting *
* (t-code : MB1B) *
* Spec. given by : Ravi kumar Sathani (SD). *
* Transport request/task: REPK901149 *
*--------------------------------------------------------------------------------*
* Inputs: *
* Select options: *
* Sales document Number(VBAK-VBELN) *
* Sales document Type (VBAK-AUART) *
* Sales document date (VBAK-AUDAT) *
* Plant (VBAP-WERKS) *
* Parameters: *
* N/A *
* Outputs: Report. *
*--------------------------------------------------------------------------------*
* *** AMENDMENTS *** *
*--------------------------------------------------------------------------------*
* Service Request/Task: *
* Programmer..........: *
* Date of Change......: *
* Description.........: *
* Search String.......: *
**********************************************************************************
REPORT zsd_pp_bdc_report NO STANDARD PAGE HEADING.

*--------------------------------------------------------------------------------*
* D A T A D E C L A R A T I O N *
*--------------------------------------------------------------------------------*

TYPE-POOLS: slis.

TYPES : BEGIN OF ty_vbak_vbap,


vbeln TYPE vbak-vbeln, "PK
posnr_i TYPE vbap-posnr, "PK
audat TYPE vbak-audat,
auart TYPE vbak-auart,
matnr_i TYPE vbap-matnr,
kwmeng_i TYPE vbap-kwmeng,
werks_i TYPE vbap-werks,
END OF ty_vbak_vbap. " End of ty_vbak_vbap.

*TYPES : BEGIN OF ty_vbap,


* vbeln TYPE vbap-vbeln, "PK
* posnr TYPE vbap-posnr, "PK
* matnr TYPE vbap-matnr,
* kwmeng TYPE vbap-kwmeng,
* werks TYPE vbap-werks,
* END OF ty_vbap.

TYPES : BEGIN OF ty_mska,


matnr TYPE mska-matnr, "PK
werks TYPE mska-werks, "PK
lgort TYPE mska-lgort, "PK
charg TYPE mska-charg, "PK
sobkz TYPE mska-sobkz, "PK
vbeln TYPE mska-vbeln, "PK
posnr TYPE mska-posnr, "PK
kalab TYPE mska-kalab,
END OF ty_mska. " End of ty_mska.

TYPES : BEGIN OF ty_final,


vbeln TYPE vbak-vbeln,
audat TYPE vbak-audat,
auart TYPE vbak-auart,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
kwmeng TYPE vbap-kwmeng,
werks TYPE vbap-werks,
kalab TYPE mska-kalab,
rmqty TYPE kwmeng,
END OF ty_final. " End of ty_final.

TYPES : BEGIN OF w_tab,


budat(10) TYPE c,
bldat(10) TYPE c,
bwartwa TYPE rm07m-bwartwa,
sobkz TYPE rm07m-sobkz,
werks TYPE rm07m-werks,
posnr TYPE posnr,
vbeln TYPE vbeln,
matnr TYPE mseg-matnr,
erfmg(13) TYPE c,
lgort TYPE mseg-lgort,
charg TYPE mseg-charg,
kdauf TYPE msegk-mat_kdauf,
kdpos TYPE msegk-mat_kdpos,
datuv(10) TYPE c, " Added by YASH: Madhuri Anmal on 17.08.2018.
datub(10) TYPE c, " Added by YASH: Madhuri Anmal on 17.08.2018.
END OF w_tab. " End of w_tab.

DATA : BEGIN OF it_error OCCURS 0,


record TYPE i,
matnr TYPE matnr,
vbeln TYPE vbeln,
message(100) TYPE c,
END OF it_error. " End of it_error.

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,

it_final TYPE STANDARD TABLE OF ty_final,


it_vbak_vbap TYPE STANDARD TABLE OF ty_vbak_vbap,
it_mska TYPE STANDARD TABLE OF ty_mska,
it_marc TYPE STANDARD TABLE OF marc.

DATA:
wa_fcat TYPE slis_fieldcat_alv,
wa_bdcdata TYPE bdcdata,
wa_bdcmsgcoll TYPE bdcmsgcoll,
wa_layout TYPE slis_layout_alv,

it_fcat TYPE slis_t_fieldcat_alv,


it_fcat1 TYPE slis_t_fieldcat_alv,
it_bdcdata TYPE TABLE OF bdcdata,
it_bdcmsgcoll TYPE TABLE OF bdcmsgcoll.

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) .

DATA : gv_mode TYPE c VALUE 'A'.

CONSTANTS: gc_x TYPE c VALUE 'X',


gc_e TYPE c VALUE 'E'.

*----Start : Added by YASH: Madhuri Anmal 28.08.2018.

TYPES: BEGIN OF ty_mchb,


matnr TYPE mchb-matnr,
werks TYPE mchb-werks,
lgort TYPE mchb-lgort,
charg TYPE mchb-charg,
clabs TYPE mchb-clabs,
END OF ty_mchb.

DATA : it_mchb TYPE STANDARD TABLE OF ty_mchb,


wa_mchb1 TYPE ty_mchb.

*----End : Added by YASH: Madhuri Anmal 28.08.2018.

*--------------------------------------------------------------------------------*
* 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.

ENDFORM. " End of 'f_clear_refresh'


*&---------------------------------------------------------------------*
*& Form F_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM f_get_data .

SELECT vbeln posnr_i audat auart matnr_i kwmeng_i werks_i


INTO TABLE it_vbak_vbap
FROM wb2_v_vbak_vbap2
WHERE vbeln IN s_vbeln
AND audat IN s_audat
AND vbtyp EQ 'C'
AND auart IN s_auart
AND werks_i IN s_werks.

IF it_vbak_vbap IS NOT INITIAL.

SORT it_vbak_vbap BY matnr_i werks_i vbeln posnr_i.

SELECT matnr werks lgort charg sobkz vbeln posnr kalab


FROM mska INTO TABLE it_mska
FOR ALL ENTRIES IN it_vbak_vbap
WHERE matnr EQ it_vbak_vbap-matnr_i
AND werks EQ it_vbak_vbap-werks_i
AND sobkz EQ gc_e
AND vbeln EQ it_vbak_vbap-vbeln
AND posnr EQ it_vbak_vbap-posnr_i.

IF sy-subrc = 0.
SORT it_mska BY matnr werks vbeln posnr.
ENDIF.

SELECT * " matnr werks sernp


FROM marc INTO TABLE it_marc
FOR ALL ENTRIES IN it_vbak_vbap
WHERE matnr EQ it_vbak_vbap-matnr_i
AND werks EQ it_vbak_vbap-werks_i.

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.

SORT it_vbak_vbap BY vbeln posnr_i.


LOOP AT it_vbak_vbap INTO wa_vbak_vbap.
wa_final-vbeln = wa_vbak_vbap-vbeln.
wa_final-audat = wa_vbak_vbap-audat.
wa_final-auart = wa_vbak_vbap-auart.
wa_final-posnr = wa_vbak_vbap-posnr_i.
wa_final-matnr = wa_vbak_vbap-matnr_i.
wa_final-kwmeng = wa_vbak_vbap-kwmeng_i.
wa_final-werks = wa_vbak_vbap-werks_i.

READ TABLE it_mska INTO wa_mska WITH KEY matnr = wa_vbak_vbap-matnr_i


werks = wa_vbak_vbap-werks_i
vbeln = wa_vbak_vbap-vbeln
posnr = wa_vbak_vbap-posnr_i.

*---Start: Added by YASH : Madhuri Anmal 22.08.2018.


IF sy-subrc = 0.
CLEAR lv_index.
lv_index = sy-tabix.
LOOP AT it_mska INTO wa_mska FROM lv_index.
IF wa_mska-matnr NE wa_vbak_vbap-matnr_i OR
wa_mska-werks NE wa_vbak_vbap-werks_i OR
wa_mska-vbeln NE wa_vbak_vbap-vbeln OR
wa_mska-posnr NE wa_vbak_vbap-posnr_i.

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.

ENDLOOP. " End of 'LOOP AT it_vbak_vbap'.


ENDFORM. " End of 'f_process_data'
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepare_fieldcat .
wa_fcat-fieldname = 'VBELN'. " Fieldname in the data table
wa_fcat-seltext_l = text-002. " Column description in the output : 'Sales Document Number'
APPEND wa_fcat TO it_fcat.

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.

ENDFORM. " End of 'prepare_fieldcat'

*&---------------------------------------------------------------------*
*& 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 .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE = ' '
* I_GRID_SETTINGS =
is_layout = wa_layout
it_fieldcat = it_fcat
TABLES
t_outtab = it_final
EXCEPTIONS
program_error = 1
OTHERS = 2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM. " End of 'alv_list_display'

*&---------------------------------------------------------------------*
*& 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.

* PERFORM bdc_dynpro USING '' ''.


* PERFORM bdc_field USING 'BDC_CURSOR'
* ''.
PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE' '=XBAC'.

CALL TRANSACTION 'MD50' USING it_bdcdata MODE gv_mode


UPDATE 'A'
MESSAGES INTO it_bdcmsgcoll.

LOOP AT it_bdcmsgcoll INTO wa_bdcmsgcoll.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
id = wa_bdcmsgcoll-msgid
lang = '-D'
no = wa_bdcmsgcoll-msgnr
v1 = wa_bdcmsgcoll-msgv1
v2 = wa_bdcmsgcoll-msgv2
v3 = wa_bdcmsgcoll-msgv3
v4 = wa_bdcmsgcoll-msgv4
IMPORTING
msg = v_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.

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_dynpro USING prog TYPE any


screen TYPE any.
CLEAR wa_bdcdata.
wa_bdcdata-program = prog.
wa_bdcdata-dynpro = screen.
wa_bdcdata-dynbegin = gc_x.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. " End of 'FORM bdc_dynpro'

FORM bdc_field USING field TYPE any


value TYPE any.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = field.
wa_bdcdata-fval = value.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. " End of 'bdc_field'

FORM bdc_mb1b.
* DATA : li_sel TYPE TABLE OF rsparams,
* lwa_sel TYPE rsparams.

SORT it_final BY vbeln.


LOOP AT it_final INTO wa_final.
* AT NEW vbeln.
* CLEAR lwa_sel.
* lwa_sel-selname = 'VBELN'.
* lwa_sel-kind = 'P'.
* lwa_sel-sign = 'I'.
* lwa_sel-option = 'EQ'.
* lwa_sel-low = wa_final-vbeln.
* APPEND lwa_sel TO li_sel.
* CLEAR lwa_sel.
* SUBMIT ztest_s_bdc WITH SELECTION-TABLE li_sel AND RETURN.

PERFORM process_mb1b USING wa_final-vbeln.

* 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.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
it_fieldcat = it_fcat1
TABLES
t_outtab = it_error.

ENDFORM. " End of 'process_errors'

*&---------------------------------------------------------------------*
*& 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 it_vbap[] IS NOT INITIAL.


LOOP AT it_vbap INTO wa_vbap.
wa_tab-budat = sy-datum.
wa_tab-bldat = sy-datum.
wa_tab-posnr = wa_vbap-posnr.
wa_tab-vbeln = wa_vbap-vbeln.
wa_tab-bwartwa = '412'.
wa_tab-sobkz = 'E'.
wa_tab-werks = wa_vbap-werks.
wa_tab-matnr = wa_vbap-matnr.

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'.

IF NOT it_tab1[] IS INITIAL.


LOOP AT it_tab1 INTO wa_tab1.
REFRESH it_bdcdata.

lin = lines( it_tab ).


budat = sy-datum.

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'


EXPORTING
date_internal = sy-datum
IMPORTING
date_external = wa_tab1-budat
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-bldat
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " End of 'IF sy-subrc <> 0'.
PERFORM bdc_dynpro USING 'SAPMM07M' '0400'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RM07M-SOBKZ'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'MKPF-BLDAT' wa_tab1-budat.
PERFORM bdc_field USING 'MKPF-BUDAT' wa_tab1-bldat.
PERFORM bdc_field USING 'RM07M-BWARTWA' wa_tab1-bwartwa.
PERFORM bdc_field USING 'RM07M-SOBKZ' wa_tab1-sobkz.
PERFORM bdc_field USING 'RM07M-WERKS' wa_tab1-werks.
PERFORM bdc_field USING 'RM07M-LGORT' wa_tab1-lgort.
PERFORM bdc_field USING 'XFULL' 'X'.
PERFORM bdc_field USING 'RM07M-WVERS2' 'X'.

CLEAR temp.

IF item_count > lin AND item_count < 11.


EXIT.
ENDIF. " End of 'IF item_count > lin AND item_count < 11'.

item_count = 1.

*-----Start : Commented by YASH: Madhuri Anmal 28.08.2018.

SELECT SINGLE * FROM mard INTO wa_mard


WHERE matnr = wa_tab1-matnr
AND werks = wa_tab1-werks
AND lgort = wa_tab1-lgort.
IF sy-subrc = 0.
IF wa_mard-labst GE wa_final-rmqty.
lv_pstqty = wa_final-rmqty.
ELSE.
lv_pstqty = wa_mard-labst.
ENDIF.
REFRESH it_mchb.

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.

IF NOT it_mchb IS INITIAL.


DELETE it_mchb WHERE clabs IS INITIAL.
CLEAR wa_mchb1.
LOOP AT it_mchb INTO wa_mchb1.
IF lv_pstqty GT 0.
IF wa_mchb1-clabs GE lv_pstqty.
"Post the all qty from the current batch
wa_tab1-erfmg = lv_pstqty.
CLEAR lv_pstqty.
ELSE.
"Post the partial/available qty from the current batch and remainig post qty from a
wa_tab1-erfmg = wa_mchb1-clabs.
lv_pstqty = lv_pstqty - wa_mchb1-clabs.
ENDIF.
lv_count = lv_count + 1.
CLEAR temp.
CONCATENATE 'MSEG-CHARG(' lv_count ')' INTO temp.
PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.
* PERFORM bdc_field USING 'BDC_CURSOR' 'MSEG-CHARG(01)'.
PERFORM bdc_field USING 'BDC_CURSOR' temp.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
IF lv_count = '01'.
PERFORM bdc_field USING 'MSEGK-MAT_KDAUF' wa_tab1-kdauf.
PERFORM bdc_field USING 'MSEGK-MAT_KDPOS' wa_tab1-kdpos."'5'.
ENDIF.
PERFORM bdc_field USING 'DKACB-FMORE' 'X'.

* lv_count = sy-tabix.

CLEAR temp.
CONCATENATE 'MSEG-MATNR(' lv_count ')' INTO temp.

PERFORM bdc_field USING temp


wa_mchb1-matnr.
CLEAR temp.
CONCATENATE 'MSEG-ERFMG(' lv_count ')' INTO temp.
PERFORM bdc_field USING temp
wa_tab1-erfmg. "wa_mchb1-erfmg.
CLEAR temp.

CONCATENATE 'MSEG-LGORT(' lv_count ')' INTO temp.

PERFORM bdc_field USING temp


wa_mchb1-lgort.
CLEAR temp.

CONCATENATE 'MSEG-CHARG(' lv_count ')' INTO temp.


PERFORM bdc_field USING temp
wa_mchb1-charg.
* AT FIRST.
* IF sy-tabix = 1.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.


PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
* ENDIF.
* ENDAT.
CLEAR : wa_marc.
READ TABLE it_marc INTO wa_marc WITH KEY matnr = wa_mchb1-matnr
werks = wa_tab1-werks.
IF sy-subrc EQ 0 .

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'.

* PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.


CLEAR temp.

CONCATENATE 'RIPW0-SERNR(' lv_count ')' INTO temp.


PERFORM bdc_dynpro USING 'SAPLIPW1' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR' temp."'RIPW0-SERNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SSER'.

PERFORM bdc_dynpro USING 'RIEQUI21' '1000'.


PERFORM bdc_field USING 'BDC_CURSOR' 'EQKTX-LOW'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'DATUV' wa_tab1-datuv.
PERFORM bdc_field USING 'DATUB' wa_tab1-datub.
PERFORM bdc_field USING 'WERK-LOW' wa_mchb1-werks.
PERFORM bdc_field USING 'LAGER-LOW' wa_mchb1-lgort.
PERFORM bdc_field USING 'CHARGE-LOW' wa_mchb1-charg.
PERFORM bdc_field USING 'LBBSA-LOW' '01'.
PERFORM bdc_field USING 'B_CHARGE-LOW' wa_mchb1-charg.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.


PERFORM bdc_field USING 'BDC_CURSOR' '02/35'."02/35
PERFORM bdc_field USING 'BDC_OKCODE' '=&IC1'.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.


PERFORM bdc_field USING 'BDC_CURSOR' '02/35'."02/35
PERFORM bdc_field USING 'BDC_OKCODE' '=&OUP'.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.


PERFORM bdc_field USING 'BDC_CURSOR' '04/03'.
PERFORM bdc_field USING 'BDC_OKCODE' '=&ALL'.

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.


PERFORM bdc_field USING 'BDC_CURSOR' '17/03'."17/03
PERFORM bdc_field USING 'BDC_OKCODE' '=ISEL'.

PERFORM bdc_dynpro USING 'SAPLIPW1' '0300'.


PERFORM bdc_field USING 'BDC_CURSOR' 'RIPW0-SERNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=RWS'.

ELSE.
CONTINUE.
ENDIF.
ENDIF.
ELSE.
CLEAR wa_mchb1.
EXIT.
ENDIF.
CLEAR wa_mchb1.
ENDLOOP.
CLEAR lv_count.
ENDIF.

ENDIF.

PERFORM bdc_dynpro USING 'SAPMM07M' '0421'.


PERFORM bdc_field USING 'BDC_CURSOR' 'MSEG-ERFMG(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'DKACB-FMORE' 'X'.

PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.


PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

CALL TRANSACTION 'MB1B' USING it_bdcdata MODE gv_mode


UPDATE 'A'
MESSAGES INTO it_bdcmsgcoll.
WAIT UP TO 3 SECONDS.

LOOP AT it_bdcmsgcoll INTO wa_bdcmsgcoll.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
id = wa_bdcmsgcoll-msgid
lang = '-D'
no = wa_bdcmsgcoll-msgnr
v1 = wa_bdcmsgcoll-msgv1
v2 = wa_bdcmsgcoll-msgv2
v3 = wa_bdcmsgcoll-msgv3
v4 = wa_bdcmsgcoll-msgv4
IMPORTING
msg = v_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.

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'

ENDLOOP. " End of 'LOOP AT it_bdcmsgcoll INTO wa_bdcmsgcoll'


REFRESH it_bdcmsgcoll.
ENDLOOP. " End of 'LOOP AT it_tab1 INTO wa_tab1'
ENDIF. " End of 'IF NOT it_tab1[] IS INITIAL'
REFRESH:it_tab1[],it_tab,it_vbap.
ENDFORM. " End of 'process_mb1b'

*&---------------------------------------------------------------------*
*& Form CHECK_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_stock .

SELECT * FROM mbew INTO TABLE it_mbew


WHERE matnr = wa_tab-matnr
AND bwkey = wa_tab-werks
* and bwtar ne space
AND lvorm NE 'X'.
ENDFORM. " End of 'check_stock'.

You might also like