如何在sap abap中没有连接表的情况下在循环中编写逻辑

时间:2019-12-23 03:23:39

标签: sap abap

我是SAP ABAPER的初学者。

我的任务是为模块SD创建ALV报告。

我做了“循环到VBAK表”,然后根据条件移动到要显示的每个数据的列。但是要获取此“账单计划日期”,我不知道条件“ WBAK-VBLN = VBKD-VBELN”的条件“ WHERE VBAK-VBLN = VBKD-VBELN和FPLT-FPLNR = VBKD-FPLNR”它吗?

enter image description here 请在“ FORM GET_DATA”中检查并更正我的脚本。或“表格显示”。 这是我的脚本:

REPORT Z_SD_DARMAWAN.
TABLES VBAK.
TABLES FPLT. 
TABLES KNA1. 
TABLES VBKD.

TYPES: BEGIN OF TY_FINAL,
      KUNNR TYPE VBAK-KUNNR,
      NAME1 TYPE KNA1-NAME1,
      VBELN TYPE VBAK-VBELN,
      AFDAT TYPE FPLT-AFDAT,
      FPLNR TYPE VBKD-FPLNR,
END OF TY_FINAL.

TYPES: BEGIN OF TY_VBAK,
      KUNNR TYPE VBAK-KUNNR,
      VBELN TYPE VBAK-VBELN,
      PS_PSP_PNR TYPE VBAK-PS_PSP_PNR,
      WAERK TYPE VBAK-WAERK,
      NETWR TYPE VBAK-NETWR,
END OF TY_VBAK.

TYPES: BEGIN OF TY_KNA1,
      KUNNR TYPE KNA1-KUNNR,
      NAME1 TYPE KNA1-NAME1,
END OF TY_KNA1.

TYPES: BEGIN OF TY_FPLT,
      AFDAT TYPE FPLT-AFDAT,
      FPLNR TYPE FPLT-FPLNR,
END OF TY_FPLT.

TYPES: BEGIN OF TY_VBKD,
      VBELN TYPE VBKD-VBELN,
      FPLNR TYPE VBKD-FPLNR,
END OF TY_VBKD.

DATA: IT_FINAL TYPE TABLE OF TY_FINAL, WA_FINAL TYPE TY_FINAL.
DATA: IT_VBAK TYPE TABLE OF TY_VBAK, WA_VBAK TYPE TY_VBAK.
DATA: IT_KNA1 TYPE TABLE OF TY_KNA1, WA_KNA1 TYPE TY_KNA1.
DATA: IT_FPLT TYPE TABLE OF TY_FPLT, WA_FPLT TYPE TY_FPLT.
DATA: IT_VBKD TYPE TABLE OF TY_VBKD, WA_VBKD TYPE TY_VBKD.

DATA: fieldcatalog TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.

SELECT-OPTIONS: SO_KUNNR FOR VBAK-KUNNR.
SELECT-OPTIONS: SO_AUART FOR VBAK-AUART.
SELECT-OPTIONS: SO_VBELN FOR VBAK-VBELN.
SELECT-OPTIONS: SO_BSTNK FOR VBAK-BSTNK.
SELECT-OPTIONS: SO_PSPSP FOR VBAK-PS_PSP_PNR.
SELECT-OPTIONS: SO_BSTDK FOR VBAK-BSTDK.
SELECT-OPTIONS: SO_ERDAT FOR VBAK-ERDAT.
SELECT-OPTIONS: SO_ERNAM FOR VBAK-ERNAM.
SELECT-OPTIONS: SO_FKSAF FOR FPLT-FKSAF.
SELECT-OPTIONS: SO_ABSTK FOR VBAK-ABSTK.

START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM DISPLAY.
PERFORM BUILD_CATALOG.
PERFORM DISPLAY_ALV.

FORM GET_DATA .
    SELECT KUNNR VBELN PS_PSP_PNR WAERK NETWR FROM VBAK INTO TABLE IT_VBAK
    WHERE KUNNR IN SO_KUNNR
    AND AUART IN SO_AUART
    AND VBELN IN SO_VBELN
    AND BSTNK IN SO_BSTNK
    AND PS_PSP_PNR IN SO_PSPSP
    AND BSTDK IN SO_BSTDK
    AND ERDAT IN SO_ERDAT
    AND ERNAM IN SO_ERNAM
    AND ABSTK IN SO_ABSTK
    AND AUART <> 'ZM01'.

    REFRESH IT_KNA1.
    SELECT KUNNR NAME1 FROM KNA1 INTO TABLE IT_KNA1 WHERE KUNNR IN SO_KUNNR.

    REFRESH IT_VBKD.
    SELECT VBELN FPLNR FROM VBKD INTO TABLE IT_VBKD WHERE VBELN IN SO_VBELN AND BSTDK IN SO_BSTDK.

    REFRESH IT_FPLT.
    SELECT AFDAT FPLNR FROM FPLT INTO TABLE IT_FPLT.
ENDFORM.

FORM DISPLAY .
  LOOP AT IT_VBAK INTO WA_VBAK.
    WA_FINAL-KUNNR = WA_VBAK-KUNNR.   "Customer Id
    READ TABLE IT_KNA1 INTO WA_KNA1 WITH KEY KUNNR = WA_VBAK-KUNNR.
    WA_FINAL-NAME1 = WA_KNA1-NAME1.   "Customer Name
    WA_FINAL-VBELN = WA_VBAK-VBELN.   "Contract Number

    READ TABLE IT_VBKD INTO WA_VBKD WITH KEY VBELN = WA_VBAK-VBELN.
    WA_FINAL-FPLNR = WA_VBKD-FPLNR.
    READ TABLE IT_FPLT INTO WA_FPLT WITH KEY FPLNR = WA_VBKD-FPLNR.
    WA_FINAL-AFDAT = WA_FPLT-AFDAT.     "Billing Plan Date

    APPEND WA_FINAl TO IT_FINAL.
    CLEAR: WA_FINAl, WA_VBAK, WA_KNA1, WA_FPLT.
  ENDLOOP.
ENDFORM.

FORM BUILD_CATALOG .
  fieldcatalog-fieldname = 'KUNNR'.
  fieldcatalog-seltext_m = 'Customer'.
  fieldcatalog-col_pos = 0.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'NAME1'.
  fieldcatalog-seltext_m = 'Custome Name'.
  fieldcatalog-col_pos = 1.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'VBELN'.
  fieldcatalog-seltext_m = 'Contract Number'.
  fieldcatalog-col_pos = 2.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'AFDAT'.
  fieldcatalog-seltext_m = 'Billing Plan Date'.
  fieldcatalog-col_pos = 10.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.
ENDFORM.

FORM DISPLAY_ALV .
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program     = sy-repid
      i_callback_top_of_page = 'TOP_OF_PAGE'
      it_fieldcat            = fieldcatalog[]
      i_save                 = 'x'
    tables
      t_outtab               = IT_FINAL
    .
  if sy-subrc <> 0.
* Implement suitable error handling here
  endif.
ENDFORM.

0 个答案:

没有答案