我不明白 READ TABLE inside LOOP 是如何工作的
I don't understand how READ TABLE inside LOOP works
在我的代码中我需要在一个循环内迭代,并且对于循环中的每次迭代我都必须填写在某些单元格中值不同的数据。
阅读 sap 文档后我得出结论,我需要的是使用读取 table 将每次迭代填充到稍后我将处理的工作区域中。
我已声明以下 table:
it_sap 包含来自 VBRK 和 VBRP 的连接内容 tables
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
蒸汽.
谢谢大家!
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
,您的示例代码中从未填写过它,所以乍一看这似乎根本不起作用或者您的示例不包含一些初始化代码。
在我的代码中我需要在一个循环内迭代,并且对于循环中的每次迭代我都必须填写在某些单元格中值不同的数据。
阅读 sap 文档后我得出结论,我需要的是使用读取 table 将每次迭代填充到稍后我将处理的工作区域中。
我已声明以下 table:
it_sap 包含来自 VBRK 和 VBRP 的连接内容 tables
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
蒸汽.
谢谢大家!
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
,您的示例代码中从未填写过它,所以乍一看这似乎根本不起作用或者您的示例不包含一些初始化代码。