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

I don't understand how READ TABLE inside LOOP works

在我的代码中我需要在一个循环内迭代,并且对于循环中的每次迭代我都必须填写在某些单元格中值不同的数据。

阅读 sap 文档后我得出结论,我需要的是使用读取 table 将每次迭代填充到稍后我将处理的工作区域中。

我已声明以下 table:

我的循环实际上是这样的:


  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 蒸汽.

谢谢大家!

LOOP AT 遍历内部 table.

的所有行

READ TABLE 从内部 table.

中最多检索一行

sy-subrc 为您提供有关上一条语句运行情况的详细信息。它的值与语句不同。在 READ TABLE 的情况下,它会告诉您是否找到了一行 (= 0) 或 (<> 0)。 READ TABLE 之后的 IF sy-subrc = 0 意思是“如果你找到了这样一行”。

如果没有一些有用的示例数据,就很难理解您的代码应该做什么以及它是否正确地做到了。正如 József Szikszai 在对您的问题的评论中指出的那样,READ TABLE 的条件依赖于 wa_ext,您的示例代码中从未填写过它,所以乍一看这似乎根本不起作用或者您的示例不包含一些初始化代码。