为信息集添加SELECT-OPTIONS

时间:2015-12-01 16:31:46

标签: sap abap infoset

我无法将参数的Select-Option正确添加到信息集中。 我在选择屏幕中得到了这些参数:

    REPORT  RSAQDVP_TEMPLATE .
*
*---------------------------------------------------------------------*
*   declarations
*   (insert your declarations in this section)
*---------------------------------------------------------------------*
data:
  BAPI_PLDORDCOMP_E1 type BAPI_PLDORDCOMP_E1,
  it_data type standard table of BAPI_PLDORDCOMP_E1.


field-symbols: <struc> type BAPI_PLDORDCOMP_E1.

*-------------------------------------------------------------------*
*   selection screen statements
*-------------------------------------------------------------------*
*   (define your selection-screen here)
parameters: plant_in like MARC-WERKS default 'IX09',
        pln_orde type PLAF-PLNUM.


* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_HEAD>


*-------------------------------------------------------------------*
*   read data into IT_DATA
*-------------------------------------------------------------------*
*  (select your data here into internal table IT_DATA)
call function 'BAPI_PLANNEDORDER_GET_DETAIL'
  EXPORTING
    PLANNEDORDER = pln_orde
  TABLES
    componentsdata = it_data.

所以基本上是2个参数(见SQ01中的截图): enter image description here

我不明白如何使用&#34; SELECT-OPTION&#34;插入范围可选参数。的语句。

提前感谢任何帮助/建议。 S上。

1 个答案:

答案 0 :(得分:2)

我们走了。

<强> 1。的信息:

您是否检查过此功能模块BAPI_PLANNEDORDER_GET_DETAIL?它不接受任何范围表/ select-options作为其参数的参数。

<强> 2。假设

唯一可能是你的目标,基于开头变量声明的类型,

it_data type standard table of BAPI_PLDORDCOMP_E1.

让我假设,你可能想要提供一个组件列表,因此你认为,你需要一个范围表,以便只选择一个组件。

第3。操作方法:

如果这是你的情况,那么你必须在你的选择屏幕中创建选择选项,简单如下:(这可能是一种方式,但是,你应该找到适当的表,其中存储了计划订单的所有组件,并在&#34; FOR&#34;中使用其名称&#34; -matnr。这里只是简单地说明了它是如何完成的。

SELECT-OPTIONS: so_matnr FOR marc-matnr.

如果程序哀悼,请在开头添加语句,或者在top-include:

中添加
TABLES: "TheTableNameYouWantForFor".

如果您将SO_xxx添加到您的param的部分,这将在代码中隐含地创建一个变量,该变量用作范围表。 在调试器中您可以看到如下内容:

enter image description here

你现在必须

  • a)分析此RANGE-TABLE,以便正确解析它 这并不容易,(可能有一个功能模块/方法,但我不知道)。 您基本上要做的是,提取那些材料编号,WHICH 是理想的。听起来并不那么明显,因为用户也可以 已进入几个范围/几个排除/严重单值/几个包含。 字段SIGN和OPTION负责上述组合。 SAP提供了很多。

这张照片会告诉你,这可能意味着什么。

enter image description here

  • b)一旦你正确地解析了所有东西并且真正识别出来,那么应该选择哪些材料(也许是第二个中介表),你可以 将so_xxx-implicit-table或mediator-table循环到struct中,获取值,将其传递给bapi调用的参数表和HOPE的结构,即material数量足以让BAPI结构传递材料(你应该先用se37测试)。如何从隐式select-options-table中检索材料?

enter image description here

但是,从我所看到的,这将是正确的方法,是自定义F4回调,因为您已经输入了计划订单的密钥。 这意味着,您将拥有系统中所有材料的子集,减少为计划订单的组成部分。

这将涉及自定义F4-Helps,自定义F4-HelpExits,自定义F4-Callbacks。

多一点努力。

事实上对于像这样的简单查询来说很多。

<强> 4。结论

检查,BAPI做了什么,部分重新实现(在se37之前检查所选表格,se37和st05将告诉你),自己编写正确的代码(或从bapi复制粘贴),你可以使用matnr-range,如上所述。