Как отобразить дублированное поле таблицы для отчета ALV? (Программирование ABAP) - PullRequest
0 голосов
/ 20 марта 2020

У меня проблема с отображением записей, в которых есть повторяющиеся поля. Мой код получает только 1 запись за один раз, когда код выполняется.

Мой запрос:

SELECT * FROM QALS INTO TABLE IT_QALS
    WHERE WERK      = P_WERK AND
          BUDAT     IN P_BUDAT AND
          ERSTELDAT IN RSTELDAT AND
          SELMATNR  IN SELMATNR.

   IF IT_QALS IS NOT INITIAL.
      SELECT * FROM QASE INTO TABLE IT_QASE
        FOR ALL ENTRIES IN IT_QALS
        WHERE PRUEFLOS = IT_QALS-PRUEFLOS.
   ENDIF.

   IF IT_QASE IS NOT INITIAL.
    SELECT * FROM QAMV INTO TABLE IT_QAMV
      FOR ALL ENTRIES IN IT_QASE
      WHERE PRUEFLOS = IT_QASE-PRUEFLOS AND
            VORGLFNR = IT_QASE-VORGLFNR AND
            MERKNR   = IT_QASE-MERKNR.
   ENDIF.

И это код для заполнения внутренней таблицы IT_PRINT, которая позже отображается:

FORM F_LSTDT.
  LOOP AT IT_QALS INTO WA_QALS.
    WA_PRINT-PRUEFLOS  = WA_QALS-PRUEFLOS.
    WA_PRINT-ERSTELDAT = WA_QALS-ERSTELDAT.
    WA_PRINT-SELMATNR  = WA_QALS-SELMATNR.
    WA_PRINT-BUDAT = WA_QALS-BUDAT.
    WA_PRINT-LOSMENGE = WA_QALS-LOSMENGE.
    WA_PRINT-LMENGE01 = WA_QALS-LMENGE01.
    WA_PRINT-LMENGE04 = WA_QALS-LMENGE04.
    WA_PRINT-CHARG = WA_QALS-CHARG.

    WA_PRINT-KTEXTLOS = WA_QALS-KTEXTLOS.

    CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
      EXPORTING
        INPUT         = 'ZFDM_NO_OPTIM'
      IMPORTING
        OUTPUT        =  P_ATTIN.
              .

    SELECT SINGLE ATINN, KLART FROM AUSP
      WHERE ATINN = @P_ATTIN AND
            KLART = '023'
      INTO CORRESPONDING FIELDS OF @WA_PRINT.

      IF WA_PRINT-ATINN IS NOT INITIAL AND WA_PRINT-KLART IS NOT INITIAL.
        SELECT SINGLE CUOBJ_BM FROM MCH1
          INTO WA_PRINT-CUOBJ
          WHERE MATNR = WA_QALS-MATNR AND
                CHARG = WA_PRINT-CHARG.
      ENDIF.

      SELECT SINGLE MAKTX FROM MAKT
        INTO WA_PRINT-MAKTX
        WHERE MATNR = WA_PRINT-SELMATNR.

    LOOP AT IT_QASE INTO WA_QASE.
      LOOP AT IT_QAMV INTO WA_QAMV.
        WA_PRINT-VERWMERKM = WA_QAMV-VERWMERKM.

        IF WA_PRINT-VERWMERKM IS NOT INITIAL.
          WA_PRINT-KURZTEXT = WA_QAMV-KURZTEXT.
        ENDIF.

        IF WA_PRINT-PRUEFLOS IS NOT INITIAL AND WA_QASE-PRUEFLOS = WA_PRINT-PRUEFLOS AND WA_QAMV-PRUEFLOS = WA_QASE-PRUEFLOS.
          IF WA_QASE-MESSWERTNI = 'X'.
              WA_PRINT-WERT = WA_QASE-MESSWERT.
          ELSE.
              SELECT SINGLE KURZTEXT FROM QPCT
                INTO WA_PRINT-WERT
                WHERE KATALOGART = '1' AND
                      CODEGRUPPE = WA_QASE-GRUPPE1 AND
                      CODE = WA_QASE-CODE1.
          ENDIF.

          WA_PRINT-MBEWERTG = WA_QASE-MBEWERTG.

          WA_PRINT-PRUEFBEMKT = WA_QASE-PRUEFBEMKT.
          IF WA_PRINT-PRUEFBEMKT IS INITIAL.
            WA_PRINT-PRUEFBEMKT = WA_QASE-PRLTEXTKZ.
            WA_PRINT-KTEXTLOS = WA_QASE-PRLTEXTKZ.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
    APPEND WA_PRINT TO IT_PRINT.
    CLEAR: WA_PRINT, WA_QALS, WA_QASE, WA_QAMV.
  ENDLOOP.
ENDFORM.

И вывод, который я получил, вот так:

Выход

enter image description here

Когда я проверяю код транзакции se16n, он должен выглядеть следующим образом:

enter image description here

Даже если я использую запрос соединения для отображения этих данных, я все еще не может отобразить эти дубликаты записей. Это мой запрос на присоединение.

SELECT QALS~WERK, QALS~PRUEFLOS, QALS~ERSTELDAT, QALS~SELMATNR, QALS~BUDAT, QALS~LOSMENGE, QALS~LMENGE01, QALS~LMENGE04, QALS~LIFNR, QALS~CHARG, QALS~KTEXTLOS, QALS~MBLNR, QAMV~VERWMERKM, QAMV~KURZTEXT, QASE~MESSWERT, QASE~MESSWERTNI, QASE~MBEWERTG,
QASE~PRUEFBEMKT, QASE~PRLTEXTKZ, QASE~VORGLFNR, QASE~MERKNR FROM QALS
    INNER JOIN QASE ON QALS~PRUEFLOS EQ QASE~PRUEFLOS
    INNER JOIN QAMV ON QASE~PRUEFLOS EQ QAMV~PRUEFLOS
*                       QASE~VORGLFNR EQ @QAMV-VORGLFNR
*                       QASE~MERKNR EQ QAMV~MERKNR
    INTO CORRESPONDING FIELDS OF TABLE @IT_ZVBR
    WHERE QALS~WERK = @P_WERK AND
          QALS~BUDAT IN @P_BUDAT AND
          QALS~ERSTELDAT IN @RSTELDAT AND
          QALS~SELMATNR IN @SELMATNR.

Примечание. В этом запросе у меня все еще есть проблема. код, который я изменяю в комментариях, я думаю, якобы работает. Потому что у меня есть выборка между этими таблицами и имеют одинаковые значения.

Может кто-нибудь мне помочь? Я очень запутан, чтобы решить эту проблему.

...