*&---------------------------------------------------------------------*
*& Report Z_BC_SALES_FLOW
REPORT z_bc_sales_flow NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* Include
*----------------------------------------------------------------------*
TYPE-POOLS: slis,
trucx.
*----------------------------------------------------------------------*
* DDIC Tables
*----------------------------------------------------------------------*
TABLES: vbak.
*----------------------------------------------------------------------*
* Internal tables
*----------------------------------------------------------------------*
* Internal Table For Sales Document Flow
DATA: BEGIN OF it_vbfa OCCURS 0,
vbelv LIKE vbfa-vbelv,
posnv LIKE vbfa-posnv,
vbeln LIKE vbfa-vbeln,
posnn LIKE vbfa-posnn,
vbtyp_n LIKE vbfa-vbtyp_n,
END OF it_vbfa.
* Internal Table For Sales Document Header
DATA: BEGIN OF it_vbak OCCURS 0,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,
ernam LIKE vbak-ernam,
vbtyp LIKE vbak-vbtyp,
vkorg LIKE vbak-vkorg,
waerk LIKE vbak-waerk,
kunnr LIKE vbak-kunnr,
END OF it_vbak.
* Internal Table For Sales Document Item
DATA: BEGIN OF it_vbap OCCURS 0,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
matnr LIKE vbap-matnr,
kwmeng LIKE vbap-kwmeng,
meins LIKE vbap-meins,
netpr LIKE vbap-netpr,
kpein LIKE vbap-kpein,
netwr LIKE vbap-netwr,
END OF it_vbap.
* Internal Table For Delivery Document Header
DATA: BEGIN OF it_likp OCCURS 0,
vbeln LIKE likp-vbeln,
waerk LIKE likp-waerk,
END OF it_likp.
* Internal Table For Delivery Document Item
DATA: BEGIN OF it_lips OCCURS 0,
vbeln LIKE lips-vbeln,
posnr LIKE lips-posnr,
matnr LIKE lips-matnr,
lfimg LIKE lips-lfimg,
meins LIKE lips-meins,
netwr LIKE lips-netwr,
END OF it_lips.
* Internal Table For Billing Document Header
DATA: BEGIN OF it_vbrk OCCURS 0,
vbeln LIKE vbrk-vbeln,
waerk LIKE vbrk-waerk,
fksto LIKE vbrk-fksto,
END OF it_vbrk.
* Internal Table For Billing Document Item
DATA: BEGIN OF it_vbrp OCCURS 0,
vbeln LIKE vbrp-vbeln,
posnr LIKE vbrp-posnr,
matnr LIKE vbrp-matnr,
fkimg LIKE vbrp-fkimg,
vgbel LIKE vbrp-vgbel,
aubel LIKE vbrp-aubel,
vgpos LIKE vbrp-vgpos,
meins LIKE vbrp-meins,
netwr LIKE vbrp-netwr,
END OF it_vbrp.
* Internal Table For Material Description
DATA: BEGIN OF it_makt OCCURS 0,
matnr LIKE makt-matnr,
spras LIKE makt-spras,
maktx LIKE makt-maktx,
END OF it_makt.
* Internal Table For Customer Master
DATA: BEGIN OF it_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
END OF it_kna1.
* Internal Table For Excluding Function Codes
DATA: BEGIN OF it_exclude OCCURS 0.
DATA: fcode LIKE rsmpe-func.
DATA: END OF it_exclude.
* Internal Table For Output
DATA: BEGIN OF it_output OCCURS 0,
vbeln LIKE vbak-vbeln, "Sales Document
posnr LIKE vbap-posnr, "Item
kunnr LIKE vbak-kunnr, "Sold-to-party
name1 LIKE kna1-name1, "Customer Name
matnr LIKE vbap-matnr, "Material
maktx LIKE makt-maktx, "Material Description
kwmeng LIKE vbap-kwmeng, "Quantity
meins LIKE vbap-meins, "Unit
netpr LIKE vbap-netpr, "Net price
kpein LIKE vbap-kpein, "
netwr LIKE vbap-netwr, "Price
waerk LIKE vbak-waerk, "Currency
erdat LIKE vbak-erdat, "Created On
ernam LIKE vbak-ernam, "Created By
vkorg LIKE vbak-vkorg, "Sales Organization
vbeln1 LIKE likp-vbeln, "Delivery Documnet
posnr1 LIKE lips-posnr, "Item
matnr1 LIKE lips-matnr, "Material
maktx1 LIKE makt-maktx, "Material Description
lfimg LIKE lips-lfimg, "Quantity
meins1 LIKE lips-meins, "Unit
netwr1 LIKE lips-netwr, "Price
waerk1 LIKE likp-waerk, "Currency
vbeln2 LIKE vbrk-vbeln, "Billing Document
posnr2 LIKE vbrp-posnr, "Item
matnr2 LIKE vbrp-matnr, "Material
maktx2 LIKE makt-maktx, "Material Description
fkimg LIKE vbrp-fkimg, "Quantity
meins2 LIKE vbrp-meins, "Unit
netwr2 LIKE vbrp-netwr, "Price
waerk2 LIKE vbrk-waerk, "Currency
selection TYPE c LENGTH 1,
END OF it_output.
* Internal Table For Selection Of Sales Order
DATA: BEGIN OF it_final OCCURS 0.
INCLUDE STRUCTURE it_output.
DATA: END OF it_final.
*----------------------------------------------------------------------*
* Work area
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Variables
*----------------------------------------------------------------------*
DATA: gd_total TYPE vbap-netwr,
gd_netpr TYPE vbap-netpr,
gd_ypos TYPE c LENGTH 10.
*----------------------------------------------------------------------*
* ALV Variables
*----------------------------------------------------------------------*
DATA: gd_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid,
gd_save TYPE c LENGTH 1.
*----------------------------------------------------------------------*
* Constants
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS so_vbeln FOR vbak-vbeln MEMORY ID aun.
PARAMETER: rb_scrpt RADIOBUTTON GROUP grp1,
rb_sform RADIOBUTTON GROUP grp1,
rb_aform RADIOBUTTON GROUP grp1.
SELECTION-SCREEN: END OF BLOCK b1.
*----------------------------------------------------------------------*
* Selection screen events
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Main Program
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM progress_indicator USING 65 text-t02.
PERFORM fetch_data.
*----------------------------------------------------------------------*
* End of main program
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
IF it_vbap[] IS NOT INITIAL.
PERFORM progress_indicator USING 80 text-t03.
PERFORM fill_data.
IF it_output[] IS NOT INITIAL.
PERFORM build_fieldcat.
IF gd_fieldcat IS NOT INITIAL.
PERFORM build_layout.
PERFORM display_output.
ENDIF. "IF gd_fieldcat IS NOT INITIAL
ELSE.
MESSAGE s117(rsdme) DISPLAY LIKE 'E'.
* Record not found
ENDIF. "IF it_output[] IS NOT INITIAL
ELSE.
MESSAGE s117(rsdme) DISPLAY LIKE 'E'.
* Record not found
ENDIF. "IF it_vbap[] IS NOT INITIAL
*----------------------------------------------------------------------*
* End of main program
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fetch_data .
gd_repid = sy-repid.
IF sy-uname EQ 'ABAP'.
gd_save = 'A'. "Default
ELSE.
gd_save = 'U'. "User Specific
ENDIF. "IF sy-uname EQ 'ABAP'
SELECT vbeln
erdat
ernam
vbtyp
vkorg
waerk
kunnr
FROM vbak
INTO TABLE it_vbak
WHERE vbeln IN so_vbeln
AND vbtyp EQ 'C'.
IF it_vbak[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
kwmeng
meins
netpr
kpein
netwr
FROM vbap
INTO TABLE it_vbap
FOR ALL ENTRIES IN it_vbak
WHERE vbeln EQ it_vbak-vbeln.
SELECT kunnr
name1
FROM kna1
INTO TABLE it_kna1
FOR ALL ENTRIES IN it_vbak
WHERE kunnr EQ it_vbak-kunnr.
IF it_vbap[] IS NOT INITIAL.
SELECT matnr
spras
maktx
FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_vbap
WHERE matnr EQ it_vbap-matnr
AND spras EQ sy-langu.
SELECT vbelv
posnv
vbeln
posnn
vbtyp_n
FROM vbfa
INTO TABLE it_vbfa
FOR ALL ENTRIES IN it_vbap
WHERE vbelv EQ it_vbap-vbeln
AND posnv EQ it_vbap-posnr
AND vbtyp_n IN ('J','M').
IF it_vbfa[] IS NOT INITIAL.
SELECT vbeln
waerk
FROM likp
INTO TABLE it_likp
FOR ALL ENTRIES IN it_vbfa
WHERE vbeln EQ it_vbfa-vbeln.
IF it_likp[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
lfimg
meins
netwr
FROM lips
INTO TABLE it_lips
FOR ALL ENTRIES IN it_vbfa
WHERE vbeln EQ it_vbfa-vbeln
AND posnr EQ it_vbfa-posnn.
ENDIF. "IF it_likp[] IS NOT INITIAL
SELECT vbeln
waerk
fksto
FROM vbrk
INTO TABLE it_vbrk
FOR ALL ENTRIES IN it_vbfa
WHERE vbeln EQ it_vbfa-vbeln
AND fksto EQ ' '.
IF it_vbrk[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
fkimg
vgbel
aubel
vgpos
meins
netwr
FROM vbrp
INTO TABLE it_vbrp
FOR ALL ENTRIES IN it_vbfa
WHERE vbeln EQ it_vbfa-vbeln
AND posnr EQ it_vbfa-posnn.
ENDIF. "IF it_vbrk[] IS NOT INITIAL
ENDIF. " IF it_vbfa[] IS NOT INITIAL
ENDIF. "IF it_vbap[] IS NOT INITIAL
ENDIF. "IF it_vbak[] IS NOT INITIAL
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_data .
LOOP AT it_vbap.
it_output-vbeln = it_vbap-vbeln.
it_output-posnr = it_vbap-posnr.
it_output-matnr = it_vbap-matnr.
it_output-kwmeng = it_vbap-kwmeng.
it_output-meins = it_vbap-meins.
it_output-netpr = it_vbap-netpr.
it_output-kpein = it_vbap-kpein.
it_output-netwr = it_vbap-netwr.
READ TABLE it_vbak
WITH KEY vbeln = it_vbap-vbeln.
IF sy-subrc EQ 0.
it_output-erdat = it_vbak-erdat.
it_output-ernam = it_vbak-ernam.
it_output-vkorg = it_vbak-vkorg.
it_output-waerk = it_vbak-waerk.
it_output-kunnr = it_vbak-kunnr.
READ TABLE it_makt
WITH KEY matnr = it_vbap-matnr.
IF sy-subrc EQ 0.
it_output-maktx = it_makt-maktx.
ENDIF. "IF sy-subrc EQ 0
READ TABLE it_kna1
WITH KEY kunnr = it_vbak-kunnr.
IF sy-subrc EQ 0.
it_output-name1 = it_kna1-name1.
ENDIF. "IF sy-subrc EQ 0
ENDIF. "IF sy-subrc EQ 0
LOOP AT it_vbfa WHERE vbelv EQ it_vbap-vbeln
AND posnv EQ it_vbap-posnr
AND vbtyp_n EQ 'J'.
READ TABLE it_likp
WITH KEY vbeln = it_vbfa-vbeln.
IF sy-subrc EQ 0.
it_output-vbeln1 = it_likp-vbeln.
it_output-waerk1 = it_likp-waerk.
READ TABLE it_lips
WITH KEY vbeln = it_vbfa-vbeln
posnr = it_vbfa-posnn.
IF sy-subrc EQ 0.
it_output-posnr1 = it_lips-posnr.
it_output-matnr1 = it_lips-matnr.
it_output-lfimg = it_lips-lfimg.
it_output-meins1 = it_lips-meins.
it_output-netwr1 = it_lips-netwr.
ENDIF. "IF sy-subrc EQ 0
ENDIF. "IF sy-subrc EQ 0
READ TABLE it_makt
WITH KEY matnr = it_lips-matnr.
IF sy-subrc EQ 0.
it_output-maktx1 = it_makt-maktx.
ENDIF. "IF sy-subrc EQ 0
APPEND it_output.
CLEAR: it_output-waerk1,
it_output-posnr1,
it_output-matnr1,
it_output-lfimg,
it_output-meins1,
it_output-netwr1,
it_output-maktx1,
it_makt,
it_lips,
it_likp,
it_vbfa.
ENDLOOP. "LOOP AT it_vbfa WHERE vbelv EQ it_vbap-vbeln
LOOP AT it_vbfa WHERE vbelv EQ it_vbap-vbeln
AND posnv EQ it_vbap-posnr
AND vbtyp_n EQ 'M'.
READ TABLE it_vbrk
WITH KEY vbeln = it_vbfa-vbeln.
IF sy-subrc EQ 0.
it_output-vbeln2 = it_vbrk-vbeln.
it_output-waerk2 = it_vbrk-waerk.
READ TABLE it_vbrp
WITH KEY vbeln = it_vbfa-vbeln
posnr = it_vbfa-posnn.
IF sy-subrc EQ 0.
it_output-posnr2 = it_vbrp-posnr.
it_output-matnr2 = it_vbrp-matnr.
it_output-fkimg = it_vbrp-fkimg.
it_output-meins2 = it_vbrp-meins.
it_output-netwr2 = it_vbrp-netwr.
ENDIF. "IF sy-subrc EQ 0
READ TABLE it_makt
WITH KEY matnr = it_vbrp-matnr.
IF sy-subrc EQ 0.
it_output-maktx2 = it_makt-maktx.
ENDIF. " IF sy-subrc EQ 0
ENDIF. "IF sy-subrc EQ 0
IF it_vbrp-vgbel IS NOT INITIAL.
MODIFY it_output TRANSPORTING vbeln2
posnr2
matnr2
maktx2
fkimg
meins2
netwr2
waerk2
WHERE vbeln1 EQ it_vbrp-vgbel
AND posnr1 EQ it_vbrp-vgpos.
ENDIF. "IF it_vbrp-vgbel IS NOT INITIAL
CLEAR: it_makt,
it_vbrp,
it_vbrk,
it_vbfa.
ENDLOOP. "LOOP AT it_vbfa WHERE vbelv EQ it_vbap-vbeln
IF it_output-vbeln1 IS INITIAL.
APPEND it_output.
ENDIF. "IF it_output-vbeln1 IS INITIAL
CLEAR: it_output,
it_vbak,
it_vbap,
it_kna1.
ENDLOOP. "LOOP AT it_vbap
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcat .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = gd_repid
i_internal_tabname = 'IT_OUTPUT'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = gd_repid
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = gd_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
LOOP AT gd_fieldcat INTO wa_fieldcat.
CASE wa_fieldcat-fieldname.
WHEN 'SELECTION' OR 'NETPR' OR 'KPEIN'.
wa_fieldcat-no_out = 'X'.
wa_fieldcat-tech = 'X'.
WHEN 'VBELN' OR 'VBELN1' OR 'VBELN2' OR 'MATNR' OR
'MATNR1' OR 'MATNR2'.
wa_fieldcat-hotspot = 'X'.
WHEN 'KWMENG'.
wa_fieldcat-no_zero = 'X'.
ENDCASE. "CASE wa_fieldcat-fieldname
MODIFY gd_fieldcat FROM wa_fieldcat.
CLEAR wa_fieldcat.
ENDLOOP. "LOOP AT gd_fieldcat INTO wa_fieldcat
ENDIF. "IF sy-subrc <> 0
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_layout .
gd_layout-zebra = 'X'.
gd_layout-box_fieldname = 'SELECTION'.
gd_layout-colwidth_optimize = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_output .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = gd_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
* 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 = gd_layout
it_fieldcat = gd_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = gd_save
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_output[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. "IF sy-subrc <> 0
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_30 text
* -->P_TEXT_T02 text
*----------------------------------------------------------------------*
FORM progress_indicator USING p_per p_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = p_per
text = p_text.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&IC1'.
IF p_selfield-value IS NOT INITIAL.
CASE p_selfield-fieldname.
WHEN 'VBELN'.
SET PARAMETER ID 'AUN' FIELD p_selfield-value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'VBELN1'.
SET PARAMETER ID 'VL' FIELD p_selfield-value.
CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
WHEN 'VBELN2'.
SET PARAMETER ID 'VF' FIELD p_selfield-value.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
WHEN 'MATNR' OR 'MATNR1' OR 'MATNR2'.
SET PARAMETER ID 'MAT' FIELD p_selfield-value.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE. "CASE p_selfield-fieldname
ENDIF. "IF p_selfield-value IS NOT INITIAL
ENDCASE. "CASE p_ucomm
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pf_status USING p_extab TYPE slis_t_extab.
it_exclude-fcode = '&DATA_SAVE'.
APPEND it_exclude.
CLEAR it_exclude.
SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING it_exclude.
ENDFORM.