簡體   English   中英

我不明白 LOOP 中的 READ TABLE 是如何工作的

[英]I don't understand how READ TABLE inside LOOP works

在我的代碼中,我需要在一個循環內進行迭代,並且對於循環中的每次迭代,我必須填充某些單元格中值不同的數據。

閱讀 sap 文檔后,我得出的結論是,我需要使用讀取表將每次迭代填充到稍后我將處理的工作區域中。

我已經聲明了以下表格:

  • it_sap帶有來自 VBRK 和 VBRP 表的連接內容

  • wa_sap作為工作區

  • it_ext包含來自外部數據庫的另一個連接的內容

  • wa_ext作為工作區。

這就是我的循環實際上的樣子:


  LOOP AT it_sap INTO wa_sap.

    wa_sap-tipo_documento = wa_sap-xblnr+2(1). " Linea

    tiket = wa_sap-xblnr+9(7).
    creationyear = wa_sap-fkdat+0(4).

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
      EXPORTING
        input  = tiket
      IMPORTING
        output = tiket.

    CONCATENATE creationyear '/' wa_sap-vkorg wa_sap-xblnr+7(2) '/' tiket INTO wa_sap-codalb.

    "CLEAR position.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = wa_sap-posnr
      IMPORTING
        output = position.

    READ TABLE it_ext INTO wa_ext
    WITH KEY codalb = wa_ext-codalb
             tipo_documento = wa_ext-tipo_documento.

    IF sy-subrc = 0.
      wa_sap-import_total = wa_ext-import_total.
      wa_sap-import = wa_ext-import.
      wa_sap-price = wa_ext-price.
      wa_sap-price_total = wa_ext-price_total.
      wa_sap-disccount = wa_ext-disccount.
      wa_sap-quantity = wa_ext-quantity.

      MODIFY it_sap FROM wa_sap.

      IF wa_sap-importe_total <> wa_sap-netwr. "AND position = 1 .
        APPEND wa_sap TO it_results.
      ENDIF.

    ENDIF.

  ENDLOOP.

它是如何工作的? 我知道通過使用條件sy-subrc = 0我可以看到前面的語句是真還是假,但我不太明白它是如何使用READ而不是SELECT steament 的

謝謝你們!

LOOP AT迭代內部表的所有行。

READ TABLE從內部表中最多檢索一行。

sy-subrc為您提供有關上sy-subrc語句工作情況的詳細信息。 它的值因語句而異。 READ TABLE情況下,它會告訴您是否找到了 ( = 0 ) 行( <> 0 )。 IF sy-subrc = 0在您的READ TABLE之后意味着“如果您找到這樣的行”。

如果沒有一些有用的示例數據,很難理解您的代碼應該做什么以及它是否正確執行。 正如 József Szikszai 在對您的問題的評論中指出的那樣, READ TABLE的條件依賴於wa_ext ,它從未填充在您的示例代碼中,因此乍一看,這看起來根本不起作用,或者您的示例不包含一些初始化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM