Skip to Content
0
Aug 22, 2023 at 12:13 PM

Line items missing while running custom report for all vendors.

40 Views

Hi All,

I have developed a custom report for showing payment pending for vendors. Vendor and plant is the input and when we pass one vendor for a plant then getting correct entries as per FBL1N but when we run the report for all vendors(vendor input field is blank) then some line items are missing for some vendors and output is not matching with FBL1N. Kindly suggest if I am missing something or else how to resolve this.

REPORT zmm_vend_paypend.
TYPES: BEGIN OF str_final,
vendor_cat TYPE t077y-txt30,
ebeln TYPE ekko-ebeln, "po
ebelp TYPE ekpo-ebelp,
vend_no TYPE lfa1-lifnr, "vendor no
vend_name TYPE lfa1-name1, "vendor name
pay_term TYPE t052u-text1, "Payment terms
gr_date TYPE ekbe-budat, "GR date
inv_no TYPE ekbe-xblnr, "invoice no
gr_no TYPE ekbe-lfbnr, "GR no
plant TYPE ekbe-werks, "plant
inv_date TYPE ekbe-bldat, "invoice date
miro_date TYPE ekbe-budat,
amount TYPE ekbe-wrbtr,
chect TYPE payr-chect,
upto7 TYPE ekbe-wrbtr,
upto15 TYPE ekbe-wrbtr,
upto30 TYPE ekbe-wrbtr,
upto60 TYPE ekbe-wrbtr,
gt_60 TYPE ekbe-wrbtr,
not_due TYPE ekbe-wrbtr,
tot_over_due TYPE ekbe-wrbtr,
tot_os TYPE ekbe-wrbtr,
hswae TYPE ekbe-hswae,
sgtxt TYPE bsik-sgtxt,
augbl TYPE bsak-augbl,
due_date TYPE sy-datum,
waers TYPE bsik-waers,
doc_num TYPE bsik-belnr,
END OF str_final,
BEGIN OF str_ekko,
ebeln TYPE ekko-ebeln,
lifnr TYPE ekko-lifnr,
zterm TYPE ekko-zterm,
END OF str_ekko,
BEGIN OF str_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF str_ekpo,
BEGIN OF str_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
belnr TYPE ekbe-belnr,
budat TYPE ekbe-budat,
werks TYPE ekbe-werks,
xblnr TYPE ekbe-xblnr,
bldat TYPE ekbe-bldat,
bewtp TYPE ekbe-bewtp,
wrbtr TYPE ekbe-wrbtr,
gjahr TYPE ekbe-gjahr,
lfbnr TYPE ekbe-lfbnr,
hswae TYPE ekbe-hswae,
dmbtr TYPE ekbe-dmbtr,
END OF str_ekbe,


       BEGIN OF str_rbkp,
belnr TYPE rbkp-belnr,
mwskz1 TYPE rbkp-mwskz1,
wmwst1 TYPE rbkp-wmwst1,
lifnr TYPE rbkp-lifnr,
gjahr TYPE rbkp-gjahr,
xblnr TYPE rbkp-xblnr,
END OF str_rbkp,

       BEGIN OF str_bsik,
belnr TYPE bsik-belnr,
lifnr TYPE bsik-lifnr,
gjahr TYPE bsik-gjahr,
xblnr TYPE bsik-xblnr,
waers TYPE bsik-waers,
zbd1t TYPE bsik-zbd1t,
sgtxt TYPE bsik-sgtxt,
zfbdt TYPE bsik-zfbdt,
END OF str_bsik,

       BEGIN OF str_bsak,
lifnr TYPE bsak-lifnr,
augbl TYPE bsak-augbl,
gjahr TYPE bsak-gjahr,
belnr TYPE bsak-belnr,
xblnr TYPE bsak-xblnr,
blart TYPE bsak-blart,
END OF str_bsak.
DATA: it_lfa1      TYPE TABLE OF lfa1,
wa_lfa1 TYPE lfa1,
it_ekko TYPE TABLE OF str_ekko,
wa_ekko TYPE str_ekko,
it_ekpo TYPE TABLE OF str_ekpo,
* wa_ekpo TYPE ekpo,
it_ekbe TYPE TABLE OF str_ekbe,
it_ekbe1 TYPE TABLE OF str_ekbe,
it_ekbe2 TYPE TABLE OF str_ekbe,
it_t052 TYPE TABLE OF t052u,
wa_t052 TYPE t052u,
it_rbkp TYPE TABLE OF str_rbkp,
wa_rbkp TYPE str_rbkp,
it_payr TYPE TABLE OF payr,
wa_payr TYPE payr,
it_bsik TYPE TABLE OF str_bsik,
wa_bsik TYPE str_bsik,
it_bsak TYPE TABLE OF str_bsak,
wa_bsak TYPE str_bsak,
it_t077y TYPE TABLE OF t077y,
wa_t077y TYPE t077y,
it_with_item TYPE TABLE OF with_item,
wa_with_item TYPE with_item,
it_final TYPE TABLE OF str_final,
wa_final TYPE str_final.
DATA: it_fcat TYPE slis_t_fieldcat_alv,
wa_fcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv.
DATA: vendor TYPE lfa1-lifnr.
SELECTION-SCREEN BEGIN OF BLOCK blk.
SELECT-OPTIONS: s_vendor FOR vendor.
PARAMETERS : p_werks TYPE ekpo-werks.
SELECTION-SCREEN END OF BLOCK blk.

SELECT lifnr
name1
ktokk
FROM lfa1 INTO CORRESPONDING FIELDS OF TABLE it_lfa1
WHERE lifnr IN s_vendor.
IF it_lfa1 IS NOT INITIAL.
SELECT *
FROM t077y INTO TABLE it_t077y FOR ALL ENTRIES IN it_lfa1
WHERE ktokk = it_lfa1-ktokk.
SELECT ebeln
lifnr
zterm
FROM ekko INTO TABLE it_ekko
WHERE lifnr IN s_vendor.
ENDIF.
IF it_ekko IS NOT INITIAL.
SELECT ebeln
ebelp
FROM ekpo INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln AND werks = p_werks.
ENDIF.
IF it_ekpo IS NOT INITIAL.
SELECT ebeln
ebelp
belnr
budat
werks
xblnr
bldat
bewtp
wrbtr
gjahr
lfbnr
hswae
dmbtr
FROM ekbe INTO CORRESPONDING FIELDS OF TABLE it_ekbe
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND werks = p_werks.
ENDIF.
IF it_ekbe IS NOT INITIAL.
SELECT belnr
mwskz1
wmwst1 "tax ammount
lifnr
gjahr
xblnr
FROM rbkp INTO CORRESPONDING FIELDS OF TABLE it_rbkp
FOR ALL ENTRIES IN it_ekbe
WHERE belnr = it_ekbe-belnr
AND gjahr = it_ekbe-gjahr.
ENDIF.
IF it_rbkp IS NOT INITIAL.
SELECT belnr
lifnr
gjahr
xblnr
waers
zbd1t
sgtxt
zfbdt
FROM bsik INTO CORRESPONDING FIELDS OF TABLE it_bsik
FOR ALL ENTRIES IN it_rbkp
WHERE lifnr = it_rbkp-lifnr
AND gjahr = it_rbkp-gjahr
AND xblnr = it_rbkp-xblnr.
ENDIF.
IF it_bsik IS NOT INITIAL.
SELECT lifnr
augbl
gjahr
belnr
xblnr
blart
FROM bsak INTO CORRESPONDING FIELDS OF TABLE it_bsak
FOR ALL ENTRIES IN it_bsik
WHERE lifnr = it_bsik-lifnr
AND belnr = it_bsik-belnr.
SELECT *
FROM with_item INTO TABLE it_with_item
FOR ALL ENTRIES IN it_bsik
WHERE belnr = it_bsik-belnr
AND gjahr = it_bsik-gjahr.
ENDIF.
IF it_ekko IS NOT INITIAL.
SELECT * FROM t052u INTO TABLE it_t052
FOR ALL ENTRIES IN it_ekko
WHERE zterm = it_ekko-zterm.
ENDIF.
IF it_bsak IS NOT INITIAL.
SELECT chect
lifnr
vblnr
gjahr
FROM payr INTO CORRESPONDING FIELDS OF TABLE it_payr
FOR ALL ENTRIES IN it_bsak
WHERE lifnr = it_bsak-lifnr
AND vblnr = it_bsak-augbl.
ENDIF.
SORT it_ekbe BY ebelp belnr bewtp.
it_ekbe1 = it_ekbe.
it_ekbe2 = it_ekbe.
DELETE it_ekbe1 WHERE bewtp NE 'E'.
DELETE it_ekbe2 WHERE bewtp NE 'Q'.
SORT it_ekbe1 BY ebeln ebelp.
SORT it_ekbe2 BY ebeln ebelp.
LOOP AT it_ekko INTO wa_ekko.
LOOP AT it_ekbe2 INTO DATA(wa_ekbe2) WHERE ebeln = wa_ekko-ebeln.
DATA lv_index TYPE i.
lv_index = sy-tabix.
READ TABLE it_t052 INTO wa_t052 WITH KEY zterm = wa_ekko-zterm.
IF sy-subrc = 0.
wa_final-pay_term = wa_t052-text1.
ENDIF.
READ TABLE it_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_ekko-lifnr.
IF sy-subrc = 0.
wa_final-vend_no = wa_lfa1-lifnr.
wa_final-vend_name = wa_lfa1-name1.
ENDIF.
READ TABLE it_t077y INTO wa_t077y WITH KEY ktokk = wa_lfa1-ktokk.
IF sy-subrc = 0.
wa_final-vendor_cat = wa_t077y-txt30.
ENDIF.
wa_final-inv_no = wa_ekbe2-xblnr.
wa_final-inv_date = wa_ekbe2-bldat.
wa_final-plant = wa_ekbe2-werks.
wa_final-ebeln = wa_ekbe2-ebeln.
wa_final-ebelp = wa_ekbe2-ebelp.
wa_final-amount = wa_ekbe2-dmbtr. "wa_ekbe2-wrbtr.
wa_final-miro_date = wa_ekbe2-budat.
wa_final-hswae = wa_ekbe2-hswae.
READ TABLE it_ekbe1 INTO DATA(wa_ekbe1) WITH KEY ebeln = wa_ekbe2-ebeln ebelp = wa_ekbe2-ebelp xblnr = wa_ekbe2-xblnr. "index lv_index.
IF sy-subrc = 0.
wa_final-gr_no = wa_ekbe1-belnr.
wa_final-gr_date = wa_ekbe1-budat.
READ TABLE it_rbkp INTO wa_rbkp WITH KEY belnr = wa_ekbe2-belnr.
IF sy-subrc = 0.
READ TABLE it_bsik INTO wa_bsik WITH KEY xblnr = wa_rbkp-xblnr.
IF sy-subrc = 0.
wa_final-due_date = wa_bsik-zfbdt + wa_bsik-zbd1t.
wa_final-doc_num = wa_bsik-belnr.
APPEND wa_final TO it_final.
ENDIF.
ENDIF.
ENDIF.
CLEAR: wa_ekbe2, wa_lfa1, wa_t077y, wa_ekbe1, wa_rbkp, wa_bsik.
ENDLOOP.
CLEAR: wa_final, wa_ekko.
ENDLOOP.
LOOP AT it_final ASSIGNING FIELD-SYMBOL(<fs_final>).
DATA: lv_ind TYPE i.
lv_ind = sy-tabix.
READ TABLE it_rbkp INTO wa_rbkp WITH KEY belnr = <fs_final>-inv_no.
IF sy-subrc = 0.
READ TABLE it_bsik INTO wa_bsik WITH KEY xblnr = wa_rbkp-xblnr.
IF sy-subrc = 0.
READ TABLE it_with_item INTO wa_with_item WITH KEY belnr = wa_bsik-belnr gjahr = wa_bsik-gjahr.
IF sy-subrc = 0.
<fs_final>-amount = <fs_final>-amount + wa_rbkp-wmwst1 + wa_with_item-wt_qbshh.
ENDIF.
READ TABLE it_bsak INTO wa_bsak WITH KEY belnr = wa_bsik-belnr gjahr = wa_bsik-gjahr.
IF sy-subrc = 0.
<fs_final>-augbl = wa_bsak-augbl.
READ TABLE it_payr INTO wa_payr WITH KEY vblnr = wa_bsak-augbl lifnr = wa_bsak-lifnr.
IF sy-subrc = 0.
<fs_final>-chect = wa_payr-chect.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR: wa_bsik, wa_bsak, wa_payr.
ENDLOOP.
DELETE it_final WHERE chect NE ''.
SORT it_final BY ebeln.
LOOP AT it_final INTO wa_final.
DATA(days) = sy-datum - wa_final-due_date.
IF ( days = 0 OR days > 0 ) AND ( days = 7 OR days < 7 ).
wa_final-upto7 = wa_final-amount.
ELSEIF ( days = 8 OR days > 8 ) AND ( days = 15 OR days < 15 ).
wa_final-upto15 = wa_final-amount.
ELSEIF ( days = 16 OR days > 16 ) AND ( days = 30 OR days < 30 ).
wa_final-upto30 = wa_final-amount.
ELSEIF ( days = 31 OR days > 31 ) AND ( days = 60 OR days < 60 ).
wa_final-upto60 = wa_final-amount.
ELSEIF days > 60.
wa_final-gt_60 = wa_final-amount.
ELSEIF days < 0.
wa_final-not_due = wa_final-amount.
ENDIF.
wa_final-tot_over_due = wa_final-upto7 + wa_final-upto15 + wa_final-upto30 + wa_final-upto60 + wa_final-gt_60.
wa_final-tot_os = wa_final-not_due + wa_final-tot_over_due.
MODIFY it_final FROM wa_final.
CLEAR: wa_final, days.
ENDLOOP.
wa_layout-colwidth_optimize = 'X'.
CLEAR wa_fcat.
wa_fcat-fieldname = 'VENDOR_CAT'.
wa_fcat-col_pos = '01'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Vendor Category'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'VEND_NO'.
wa_fcat-col_pos = '02'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Vendor No.'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'VEND_NAME'.
wa_fcat-col_pos = '03'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Vendor Name'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'PAY_TERM'.
wa_fcat-col_pos = '04'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Payment Terms'.
APPEND wa_fcat TO it_fcat.
*CLEAR wa_fcat.
*wa_fcat-fieldname = 'SGTXT'.
*wa_fcat-col_pos = '05'.
*wa_layout-colwidth_optimize = 'X'.
*wa_fcat-seltext_m = 'Text'.
*APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'INV_NO'.
wa_fcat-col_pos = '06'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Invoice No'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'INV_DATE'.
wa_fcat-col_pos = '07'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Invoice Date'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'GR_NO'.
wa_fcat-col_pos = '08'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'GR No'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'GR_DATE'.
wa_fcat-col_pos = '09'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'GR Date'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'MIRO_DATE'.
wa_fcat-col_pos = '10'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'MIRO Date'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'DOC_NUM'.
wa_fcat-col_pos = '11'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Document Number'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'DUE_DATE'.
wa_fcat-col_pos = '12'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Due Date'.
APPEND wa_fcat TO it_fcat.
*CLEAR wa_fcat.
*wa_fcat-fieldname = 'WAERS'.
*wa_fcat-col_pos = '13'.
*wa_layout-colwidth_optimize = 'X'.
*wa_fcat-seltext_m = 'Currency'.
*APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'HSWAE'.
wa_fcat-col_pos = '13'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Currency'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'NOT_DUE'.
wa_fcat-col_pos = '14'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Not Due'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'UPTO7'.
wa_fcat-col_pos = '15'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = '0 to 7'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'UPTO15'.
wa_fcat-col_pos = '16'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = '8 to 15'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'UPTO30'.
wa_fcat-col_pos = '17'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = '16 to 30'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'UPTO60'.
wa_fcat-col_pos = '18'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = '31 to 60'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'GT_60'.
wa_fcat-col_pos = '19'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Gt 60'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'TOT_OVER_DUE'.
wa_fcat-col_pos = '20'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Total Over Due'.
APPEND wa_fcat TO it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'TOT_OS'.
wa_fcat-col_pos = '21'.
wa_layout-colwidth_optimize = 'X'.
wa_fcat-seltext_m = 'Total O/S'.
APPEND wa_fcat TO it_fcat.
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 = ' '
* I_CALLBACK_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 = wa_layout
it_fieldcat = it_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_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_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.