ABAP新手求助:创建选择屏幕查询客户列表
ABAP选择屏幕查询客户列表:代码优化与说明
嗨,作为ABAP新手能写出这样的基础查询逻辑已经很赞啦!我帮你把代码整理得更规范实用,还加了一些新手友好的优化点,一起来看看吧~
你的原代码(补充完整版)
先把你写的代码补全并格式化:
REPORT ZBSP_CODING. DATA: ls_ZBSPCUSTOMERS TYPE ZBSPCUSTOMERS, lt_ZBSPCUSTOMERS TYPE TABLE OF ZBSPCUSTOMERS, lv_KUNNR TYPE KUNNR. SELECT-OPTIONS p_KUNNR FOR lv_KUNNR NO INTERVALS. SELECT * FROM ZBSPCUSTOMERS INTO ls_ZBSPCUSTOMERS WHERE KUNNR IN p_KUNNR. WRITE: / ls_ZBSPCUSTOMERS-KUNNR, / ls_ZBSPCUSTOMERS-NAME_FIRST, ls_ZBSPCUSTOMERS-NAME_LAST. ENDSELECT.
优化后的实用代码
针对新手场景,优化了效率、可读性和用户体验:
REPORT ZBSP_CODING. * 自定义客户结构体(只取需要的字段,避免冗余) TYPES: BEGIN OF ty_customer, kunnr TYPE kunnr, name_first TYPE name_first, name_last TYPE name_last, street TYPE adrc-street, " 假设你的表有地址字段,可按需调整 END OF ty_customer. * 定义内表和工作区 DATA: lt_customer TYPE TABLE OF ty_customer, ls_customer TYPE ty_customer, lv_kunnr TYPE kunnr. * 创建选择屏幕:强制输入编号,仅允许单个值 SELECT-OPTIONS: s_kunnr FOR lv_kunnr NO INTERVALS OBLIGATORY. * 批量读取数据(比逐行读取效率高,适合大数据量) SELECT kunnr name_first name_last street FROM ZBSPCUSTOMERS INTO CORRESPONDING FIELDS OF TABLE lt_customer WHERE kunnr IN s_kunnr. * 处理查询结果 IF lt_customer IS INITIAL. WRITE: / '⚠️ 未查询到符合条件的客户信息'. ELSE. * 输出对齐的表头和分隔线 WRITE: / '客户编号', 15 '名', 30 '姓', 45 '地址'. WRITE: / sy-uline(60). " 生成60字符长的分隔线 * 循环输出客户数据 LOOP AT lt_customer INTO ls_customer. WRITE: / ls_customer-kunnr UNDER '客户编号', ls_customer-name_first UNDER '名', ls_customer-name_last UNDER '姓', ls_customer-street UNDER '地址'. ENDLOOP. ENDIF.
关键优化点说明
- 数据定义更清晰:用
TYPES自定义结构体,只包含需要的字段,避免全表字段冗余,也方便后续扩展 - 选择屏幕更友好:添加
OBLIGATORY强制用户输入客户编号,防止空查询;NO INTERVALS保持你需要的单个值输入限制 - 数据读取更高效:用
INTO CORRESPONDING FIELDS OF TABLE一次性把符合条件的数据读入内表,比逐行SELECT...ENDSELECT效率提升很多 - 输出更易读:增加表头、分隔线和对齐输出,让查询结果一目了然;同时添加空数据提示,避免用户看到空白界面一脸懵
内容的提问来源于stack exchange,提问作者sharpnado
相关产品推荐
相关产品推荐

