用SELECTION-TABLE和FREE SELECTIONS提交标准程序。

2020-08-13 23:53发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在开发一个程序来自动执行CML发票过帐。

具有正常选择屏幕和动态选择的标准程序,我需要同时填写两者才能正确运行该程序。

问题是SELECTION-TABLE值正确传递,但是当我检查texpr表时,在调用的程序中它为空。

下面是我的示例代码:



ls_fields-arity =0。
ls_fields-fieldname ='SKOART'。
ls_fields-option ='EQ'。
ls_fields-low ='1105'。

APPEND ls_fields到ls_texpr-expr_tab。
ls_texpr-tablename ='VDBEPP'。
APPEND ls_texpr到texpr。


清除ls_seltab。
ls_seltab-selname =' SO_BUKRS'。
ls_seltab-kind ='S'。
ls_seltab-sign ='I'。
ls_seltab-option ='EQ'。
ls_seltab-low ='ABCD'。
* ls_seltab- 高= so_date-high。
附加ls_seltab到lt_seltab。
*
*
清除ls_seltab。
ls_seltab-selname ='SO_RANL'。
ls_seltab-kind ='S'。
ls_seltab-sign ='I'。
ls_seltab-option ='EQ'。
* ls_seltab-low ='123456'。
* ls_seltab- 高= so_date-high。
附加ls_seltab到lt_seltab。

清除ls_seltab。
ls_seltab-selname ='P_DDISPO'。
ls_seltab-kind ='P'。
ls_seltab-low ='20201211'。

附加ls_seltab到lt_seltab。
*
清除ls_seltab。
ls_seltab-selname = " P_KDATE"。
ls_seltab-kind ='P'。
* ls_seltab-sign ='I'。
* ls_seltab-option ='EQ'。
ls_seltab-low = sy-datum。
* ls_seltab-high = so_date-high。
附加ls_seltab到lt_seltab。







提交带有选择表的rfvsold2
lt_seltab
可自由选择的texpr
导出列表以存储并返回。



*
调用功能'LIST_FROM_MEMORY'
表格
listobject = list_obj
EXCEPTIONS
not_found = 1
其他=2。
*
呼叫功能'LIST_TO_ASCI'
TABLES
listasci = list_asc
listobject = list_obj
例外
empty_list = 1
list_index_invalid = 2
OTHERS = 3。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在开发一个程序来自动执行CML发票过帐。

具有正常选择屏幕和动态选择的标准程序,我需要同时填写两者才能正确运行该程序。

问题是SELECTION-TABLE值正确传递,但是当我检查texpr表时,在调用的程序中它为空。

下面是我的示例代码:



ls_fields-arity =0。
ls_fields-fieldname ='SKOART'。
ls_fields-option ='EQ'。
ls_fields-low ='1105'。

APPEND ls_fields到ls_texpr-expr_tab。
ls_texpr-tablename ='VDBEPP'。
APPEND ls_texpr到texpr。


清除ls_seltab。
ls_seltab-selname =' SO_BUKRS'。
ls_seltab-kind ='S'。
ls_seltab-sign ='I'。
ls_seltab-option ='EQ'。
ls_seltab-low ='ABCD'。
* ls_seltab- 高= so_date-high。
附加ls_seltab到lt_seltab。
*
*
清除ls_seltab。
ls_seltab-selname ='SO_RANL'。
ls_seltab-kind ='S'。
ls_seltab-sign ='I'。
ls_seltab-option ='EQ'。
* ls_seltab-low ='123456'。
* ls_seltab- 高= so_date-high。
附加ls_seltab到lt_seltab。

清除ls_seltab。
ls_seltab-selname ='P_DDISPO'。
ls_seltab-kind ='P'。
ls_seltab-low ='20201211'。

附加ls_seltab到lt_seltab。
*
清除ls_seltab。
ls_seltab-selname = " P_KDATE"。
ls_seltab-kind ='P'。
* ls_seltab-sign ='I'。
* ls_seltab-option ='EQ'。
ls_seltab-low = sy-datum。
* ls_seltab-high = so_date-high。
附加ls_seltab到lt_seltab。







提交带有选择表的rfvsold2
lt_seltab
可自由选择的texpr
导出列表以存储并返回。



*
调用功能'LIST_FROM_MEMORY'
表格
listobject = list_obj
EXCEPTIONS
not_found = 1
其他=2。
*
呼叫功能'LIST_TO_ASCI'
TABLES
listasci = list_asc
listobject = list_obj
例外
empty_list = 1
list_index_invalid = 2
OTHERS = 3。

付费偷看设置
发送
6条回答
hengyuye
1楼-- · 2020-08-14 00:02

可以自由选择(链接到ABAP文档-变体5)仅在可执行程序具有逻辑数据库(在程序属性中定义)时才有效。

由于RFVSOLD2并非基于逻辑数据库构建,因此无效。

因此,您唯一的机会就是开发人员设计了自己的程序,以便可以传输自由选择。 而且你很幸运。 您可以这样操作:

 DATA(p_rdfi)= VALUE rsdsfields_t((tablename ='VDBEPP'fieldname ='SKOART'))。
 DATA(p_rsdt)= VALUE rsdstabs_t((prim_tab ='VDARL')(prim_tab ='VDBEPP'))。

 提交rfvsold2
   与SELECTION-TABLE lt_seltab
 *免费选择texpr
   WITH p_expr = texpr"自由选择(您已经定义的选择)
   p_ctfd = 1"计数字段
   WITH p_rdfi = p_rdfi"带有选择项的字段
   WITH p_rsdt = p_rsdt"选择表
   导出列表到内存
   并返回。

半个程序猿
2楼-- · 2020-08-14 00:00

请使用代码按钮发布代码(在完整的代码格式后加上DATA,以便程序编译)

闻人可可
3楼-- · 2020-08-14 00:10

p>

 DATA:ls_fields TYPE rsdsexpr,
       ls_texpr TYPE rsds_expr,
       texpr TYPE rsds_texpr,
       ls_seltab TYPE rsparams,
       lt_seltab rsparams的类型表。

 ls_fields-arity = 0。
 ls_fields-fieldname ='SKOART'。
 ls_fields-option ='EQ'。
 ls_fields-low ='1105'。
 将ls_fields附加到ls_texpr-expr_tab。
 ls_texpr-tablename ='VDBEPP'。
 将ls_texpr附加到texpr。

 清除ls_seltab。
 ls_seltab-selname ='SO_BUKRS'。
 ls_seltab-kind ='S'。
 ls_seltab-sign ='I'。
 ls_seltab-option ='EQ'。
 ls_seltab-low ='ABCD'。
 附加ls_seltab至lt_seltab。

 清除ls_seltab。
 ls_seltab-selname ='SO_RANL'。
 ls_seltab-kind ='S'。
 ls_seltab-sign ='I'。
 ls_seltab-option ='EQ'。
 ls_seltab-low ='123456'。
 附加ls_seltab至lt_seltab。

 清除ls_seltab。
 ls_seltab-selname ='P_DDISPO'。
 ls_seltab-kind ='P'。
 ls_seltab-low ='20201211'。
 附加ls_seltab至lt_seltab。

 清除ls_seltab。
 ls_seltab-selname ='P_KDATE'。
 ls_seltab-kind ='P'。
 ls_seltab-low = sy数据。
 附加ls_seltab至lt_seltab。


 提交rfvsold2
   与SELECTION-TABLE lt_seltab
   免费选择texpr
   导出列表到内存
   然后返回。


 通话功能" LIST_FROM_MEMORY"
   桌子
   listobject = list_obj
   例外情况
   not_found = 1
   其他= 2。

 通话功能" LIST_TO_ASCI"
   桌子
   listasci = list_asc
   listobject = list_obj
   例外情况
   empty_list = 1
   list_index_invalid = 2
   OTHERS = 3。
spaceman01
4楼-- · 2020-08-14 00:18

嗨,

请尝试下面的代码,而不是到Asci的列表

数据:gr_table TYPE REF TO data,
         gt_line TYPE REF TO数据。

 *将wa/it_final定义为必需的类型表。

   字段符号: TYPE STANDARD TABLE,
                   TYPE任意。

   cl_salv_bs_runtime_info => set(
       导出显示= abap_false
                 元数据= abap_false
                 数据= abap_true)。

 提交<程序名称>导出列表以存储并返回。

 尝试。
       cl_salv_bs_runtime_info => get_data_ref(
         正在导入r_data = gr_table)。
       ASSIGN gr_table-> *至。
     捕获cx_salv_bs_sc_runtime_info。
       消息:text-m01类型" S",显示为" E"。
       离开清单处理。
   ENDTRY。

   cl_salv_bs_runtime_info => clear_all()。
   如果已分配 []。

   万一。
 创建数据gt_line类似于的行。
   分配gt_line-> *至。

 循环至 INTO 。
 将对应的移动到wa_final。
 将wa_final附加到it_final。
 结局。





 
huskylover
5楼-- · 2020-08-14 00:14

我不确定在所有情况下输出是否都是ALV,但是结合使用LIST_FROM_MEMORY和CL_SALV_BS_RUNTIME_INFO应该返回所有可能的信息。

Alawn_Xu
6楼-- · 2020-08-14 00:15

您好,

是指FNM1/报告RFVSOLD2吗?

该选项已添加到标准中,并带有注释 2393134

亲切的问候,

Michael

一周热门 更多>