ABAP 学习笔记 三


REPORT  Y_LWY08.
TABLES:  EKKO,EKET,EKPO.

* 定义 内表
DATA: BEGIN OF ITAB OCCURS 0,
           EBELN LIKE EKKO-EBELN,
           MENGE LIKE EKPO-MENGE,
           WEMNG LIKE EKET-WEMNG,
      END OF ITAB.

* 定义数据

DATA: MATNR  LIKE EKPO-MATNR,
      MENGE  LIKE EKPO-MENGE,
      WEMNG  LIKE EKET-WEMNG,
      EBELN  LIKE EKPO-EBELN.

*屏幕上输入的内容
SELECT-OPTIONS:      EBELN1 FOR  EKKO-EBELN,
                     BEDAT FOR  EKKO-BEDAT,
                     EKGRP FOR  EKKO-EKGRP.
PARAMETERS:  R1 RADIOBUTTON GROUP RADI,
             R2 RADIOBUTTON GROUP RADI,
             R3 RADIOBUTTON GROUP RADI.

*查询我们需要的相关数据了

SELECT  K~EBELN
          INTO CORRESPONDING FIELDS OF TABLE ITAB
                 FROM EKKO AS K
       WHERE   K~EBELN IN EBELN1
         AND   K~BEDAT IN BEDAT
         AND   K~EKGRP IN EKGRP.

LOOP AT ITAB.
    SELECT SUM( MENGE ) INTO ITAB-MENGE
          FROM EKPO
               WHERE EBELN EQ ITAB-EBELN.
          MODIFY ITAB.
ENDLOOP.

LOOP AT ITAB.
    SELECT SUM( WEMNG ) INTO ITAB-WEMNG
          FROM EKET
               WHERE EBELN EQ ITAB-EBELN.
          MODIFY ITAB.
ENDLOOP.

* 定义输出界面

TOP-OF-PAGE .
    WRITE: /采购凭证号,22 物料号码,
            47 采购订单数量,77  收到货物数量,
            95 完成标志.
       ULINE AT /1(130).
END-OF-PAGE .

        START-OF-SELECTION.

* 把我们查到的数据输出了

 IF R1 = X.
LOOP AT ITAB.
             SELECT S~MATNR S~MENGE P~WEMNG S~EBELN
               INTO (MATNR, MENGE, WEMNG, EBELN)
     FROM EKPO AS S INNER JOIN EKET AS P
                            ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
                    WHERE S~EBELN = ITAB-EBELN.
     IF ITAB-MENGE > ITAB-WEMNG.
             WRITE: /2 EBELN,23 MATNR,41 MENGE,
                     71 WEMNG,97 否.
           ULINE AT /1(130).
             CLEAR: EBELN,MATNR,MENGE,WEMNG.
     ENDIF.
             ENDSELECT.
ENDLOOP.

     ELSEIF R2 = X.
LOOP AT ITAB.
              SELECT S~MATNR S~MENGE P~WEMNG S~EBELN
               INTO (MATNR, MENGE, WEMNG, EBELN)
       FROM EKPO AS S INNER JOIN EKET AS P
                            ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
                    WHERE S~EBELN = ITAB-EBELN.
     IF  ITAB-MENGE <= ITAB-WEMNG.
              WRITE: /2 EBELN,23 MATNR,41 MENGE,
                     71 WEMNG,97 是.
              ULINE AT /1(130).
             CLEAR: EBELN,MATNR,MENGE,WEMNG.
     ENDIF.
              ENDSELECT.
ENDLOOP.

     ELSE.
LOOP AT ITAB.

            SELECT S~MATNR S~MENGE P~WEMNG S~EBELN
               INTO (MATNR, MENGE, WEMNG, EBELN)
     FROM EKPO AS S INNER JOIN EKET AS P
                            ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
                    WHERE S~EBELN = ITAB-EBELN.
     IF ITAB-MENGE > ITAB-WEMNG.
             WRITE: /2 EBELN, 23 MATNR,41 MENGE,
                     71 WEMNG,97 否.
           ULINE AT /1(130).
             CLEAR: EBELN,MATNR,MENGE,WEMNG.
     ENDIF.
             ENDSELECT.
   ENDLOOP.
 ENDIF.

LOOP AT ITAB.
IF R3 = X AND ITAB-MENGE <= ITAB-WEMNG.
            SELECT S~MATNR S~MENGE P~WEMNG S~EBELN
               INTO (MATNR, MENGE, WEMNG, EBELN)
     FROM EKPO AS S INNER JOIN EKET AS P
                            ON S~EBELP = P~EBELP AND S~EBELN = P~EBELN
                    WHERE S~EBELN = ITAB-EBELN.
        WRITE: /2 EBELN,23 MATNR,41 MENGE,
                     71 WEMNG,97 是.
           ULINE AT /1(130).
             CLEAR: EBELN,MATNR,MENGE,WEMNG.
             ENDSELECT.
         ENDIF.
ENDLOOP.