If you not to make a report, to show the open sales order along with delivered and balance quantity, you can try with with the help of this program.
*& Report ZSD_OPEN_ORDERS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
tables : vbak, vbap.
types : begin of tp_so_items,
sel,
"header details
vbeln type vbeln_va,
erdat type erdat,
auart type auart,
kunnr type kunnr,
"line items details
posnr type posnr_va,
matnr type matnr,
arktx type arktx,
kwmeng type kwmeng,
vrkme type vrkme,
werks type werks_ext,
"vbup delivery status
lfsta type lfsta,
"delivered qty
kwmeng_dlv type kwmeng, " delivered quantity
kwmeng_bal type kwmeng, "balance quantity
name1 type kna1-name1,
end of tp_so_items,
begin of tp_lips,
vbeln type vbeln_vl,
wadat_ist type wadat_ist,
posnr type posnr_vl,
matnr type matnr,
lfimg type lfimg,
meins type meins,
vgbel type vgbel,
vgpos type vgpos,
end of tp_lips,
begin of tp_kna1,
kunnr type kna1-kunnr,
name1 type kna1-name1,
end of tp_kna1.
data : gs_so_items type tp_so_items,
gt_so_items type standard table of tp_so_items,
gt_so_items1 type standard table of tp_so_items,
gs_lips type tp_lips,
gt_lips type standard table of tp_lips,
gs_kna1 type tp_kna1,
gt_kna1 type standard table of tp_kna1.
"ALV fieldcatalog
DATA: GT_FCAT TYPE LVC_T_FCAT, "slis_t_fieldcat_alv,
GS_FCAT LIKE LINE OF GT_FCAT,
GS_LAYOUT TYPE LVC_S_LAYO, "slis_layout_alv,
GS_VARIANT TYPE DISVARIANT, "For Save Variant
GS_GRID TYPE LVC_S_GLAY,
gv_cnt type i.
selection-screen begin of block b1 with frame title text-001.
select-options : s_kunnr for vbak-kunnr,
s_matnr for vbap-matnr,
S_auart for vbak-auart,
s_vbeln for vbak-vbeln,
s_erdat for vbak-ERDAT.
selection-screen end of block b1.
start-of-selection.
perform get_data.
perform build_data.
perform display_data.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA.
select a~vbeln a~erdat a~auart a~kunnr
b~posnr b~matnr b~arktx b~kwmeng b~vrkme b~werks
c~lfsta
from vbak as a inner join vbap as b on a~vbeln = b~vbeln
inner join vbup as c on b~vbeln = c~vbeln
and b~POSNR = c~POSNR
into corresponding fields of table gt_so_items
where a~vbeln in s_vbeln
and a~kunnr in s_kunnr
and a~ERDAT in s_erdat
and a~auart in S_AUART
and b~matnr in s_matnr
and ( c~LFSTA = 'A' or c~LFSTA = 'B' ). "A complete open orde, B partial delivery items
if gt_so_items[] is not initial.
"for customer name
sort gt_so_items by kunnr.
select kunnr name1 from kna1 into corresponding fields of table gt_kna1
for all entries in gt_so_items where kunnr = gt_so_items-kunnr.
endif.
"for partial delivered
gt_so_items1[] = gt_so_items[].
delete gt_so_items1 where LFSTA ne 'B'.
sort gt_so_items by vbeln POSNR.
sort gt_so_items1 by vbeln POSNR.
if gt_so_items1[] is not initial.
"select delivery details for all partial lines
select a~vbeln a~wadat_ist
b~posnr b~matnr b~lfimg b~meins b~vgbel b~vgpos
from likp as a inner join lips as b on a~vbeln = b~vbeln
into table gt_lips
for all entries in gt_so_items1 where b~vgbel = gt_so_items1-vbeln
and b~vgpos = gt_so_items1-posnr.
delete gt_lips where wadat_ist is initial.
sort gt_lips by vgbel vgpos.
endif.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_data.
loop at gt_so_items into gs_so_items.
"customer name
clear : gs_kna1.
read table gt_kna1 into gs_kna1 with key kunnr = gs_so_items-kunnr.
if sy-subrc = 0.
gs_so_items-name1 = gs_kna1-name1.
endif.
if gs_so_items-lfsta = 'a'.
else.
clear : gs_lips.
read table gt_lips into gs_lips with key vgbel = gs_so_items-vbeln
vgpos = gs_so_items-posnr binary search.
if sy-subrc = 0.
clear : gs_lips.
loop at gt_lips into gs_lips from sy-tabix.
if gs_lips-vgbel ne gs_so_items-vbeln or
gs_lips-vgpos ne gs_so_items-posnr.
exit.
endif.
gs_so_items-kwmeng_dlv = gs_so_items-kwmeng_dlv + gs_lips-lfimg.
clear : gs_lips.
endloop.
endif.
endif.
gs_so_items-kwmeng_bal = gs_so_items-kwmeng - gs_so_items-kwmeng_dlv.
modify gt_so_items from gs_so_items transporting kwmeng_dlv kwmeng_bal name1.
clear : gs_so_items.
endloop.
endform.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA.
CLEAR : GV_CNT, GT_FCAT[], GS_FCAT.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'SEL'.
GS_VARIANT-REPORT = SY-REPID.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'VBELN'.
GS_FCAT-HOTSPOT = 'X'.
GS_FCAT-EMPHASIZE = 'C5'.
GS_FCAT-no_zero = 'X'.
GS_FCAT-COLTEXT = 'Sales order Number'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'ERDAT'.
GS_FCAT-COLTEXT = 'Sales order date'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'AUART'.
GS_FCAT-COLTEXT = 'Doc. type'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'WERKS'.
GS_FCAT-COLTEXT = 'Site'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'KUNNR'.
GS_FCAT-COLTEXT = 'Customer ID'.
GS_FCAT-no_zero = 'X'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'NAME1'.
GS_FCAT-COLTEXT = 'Customer name'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'POSNR'.
GS_FCAT-COLTEXT = 'Item No.'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'LFSTA'.
GS_FCAT-COLTEXT = 'Delivery status'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'MATNR'.
GS_FCAT-COLTEXT = 'Article Number'.
GS_FCAT-no_zero = 'X'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'ARKTX'.
GS_FCAT-COLTEXT = 'Article description'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'VRKME'.
GS_FCAT-COLTEXT = 'Order unit'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'KWMENG'.
GS_FCAT-COLTEXT = 'Order quantity'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'KWMENG_DLV'.
GS_FCAT-COLTEXT = 'Delivered quantity'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GV_CNT = GV_CNT + 1.
GS_FCAT-COL_POS = GV_CNT .
GS_FCAT-FIELDNAME = 'KWMENG_BAL'.
GS_FCAT-COLTEXT = 'Balance quantity'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
* I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE'
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = gt_fcat[]
* I_GRID_SETTINGS = gs_grid
* IT_EVENTS = lt_evts[]
* IT_EVENTS = I_EVENTS
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = GS_VARIANT
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = gt_so_items[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " DISPLAY_DATA
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
when '&IC1'.
clear : gs_so_items.
read TABLE gt_so_items into gs_so_items INDEX rs_selfield-tabindex.
if gs_so_items-vbeln is NOT INITIAL.
set PARAMETER ID 'AUN' FIELD gs_so_items-vbeln.
call TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
endif.
ENDCASE.
rs_selfield-refresh = 'X'.
rs_selfield-row_stable = 'X'.
rs_selfield-col_stable = 'X'.
CLEAR : SY-UCOMM.
endform.
0 Comments