0% found this document useful (0 votes)
42 views14 pages

Sales Report

The document defines internal tables to store data for sales documents, deliveries, billings, materials, customers, and output. It includes logic to fetch data from these tables based on a sales order selection and populate the output internal table for further processing and display.

Uploaded by

sapkalsachin60
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)
42 views14 pages

Sales Report

The document defines internal tables to store data for sales documents, deliveries, billings, materials, customers, and output. It includes logic to fetch data from these tables based on a sales order selection and populate the output internal table for further processing and display.

Uploaded by

sapkalsachin60
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/ 14

*&---------------------------------------------------------------------*

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

You might also like