点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我绝对是ABAP(和编码)的初学者,并且遇到一个不确定的问题,我不确定该如何描述。 好吧,我被要求做一个简单的程序,该程序将输出一个包含客户编号,客户名称,城市和每个客户所下订单的数量的列表。
我还被告知,如果客户编号 丢失(或不存在),它仍应在列表中显示为"找不到客户端"或" X"。 例如,我正在搜索1号至50号客户,系统找不到15-20号客户的任何结果。 在这种情况下,列表将给出从1到14的输出,然后为接下来的6条记录写'X',然后将再次照常显示输出,其值从21开始。
我的问题是,我无法解决问题的这一部分。 我的输出仅显示可以在系统中找到的客户编号。
感谢您的帮助,并提前感谢您。
最诚挚的问候,
Arnab Goswami
报告z_XYZ 类型:开始于g_ty_kna1, KUNNR TYPE KUNNR, NAME1 TYPE NAME1, ORT01类型ORT01, g_ty_kna1结束。 数据:g_ty_kna1的g_it_kna1类型标准表, g_wa_kna1类型g_ty_kna1, g_kunnr TYPE kna1-KUNNR, g_name1 TYPE kna1-NAME1, g_ORT01类型kna1-ORT01, 安扎尔类型i。 带有框架标题text-001的Eingabe块的选择屏幕开始。 SELECT_OPTIONS s_kunnr FOR g_kunnr。 Eingabe区块的选择屏幕结束。 如果s_kunnr是INITIAL。 消息'Bitte geben Sie eine Kundennummer an。'(003)TYPE'E'。 其他。 执行Datenerfassung。 执行日期。 万一。 *&------------------------------------------------ --------------------- * *&表格Datenerfassung *&------------------------------------------------ --------------------- * *文字 * ------------------------------------------------- --------------------- * 表格Datenerfassung。 选择昆纳名称1 ORT01 从KNA1 表g_it_kna1的对应字段 s_kunnr中的KUNNR。 ENDFORM。 " Datenerfassung *&------------------------------------------------ --------------------- * *&表格日期和日期 *&------------------------------------------------ --------------------- * *文字 * ------------------------------------------------- --------------------- * 表格Datenverarbeitung。 新队。 乌兰(78)。 新队。 写:sy-vline, (7):'Kunde'(004),sy-vline, (22):"名称"(005),sy-vline, (18):" Ort"(006),sy-vline, (18):" AnzahlAufträge"(007),sy-vline。 新队。 乌兰(78)。 新队。 循环至g_it_kna1,进入g_wa_kna1。 " WHERE KUNNR = g_wa_kna1-KUNNR。 选择计数(*) INTO安扎尔 从VBAK 哪里KUNNR = g_wa_kna1-KUNNR 由Kunr分组。 ENDSELECT。 如果sy-index = g_kunnr。 写:sy-vline, (7):g_wa_kna1-KUNNR,sy-vline, (22):g_wa_kna1-NAME1,sy-vline, (18):g_wa_kna1-ORT01,sy-vline, (18):anzahl,sy-vline。 新队。 乌兰(78)。 新队。 其他。 做6次。 检查14和21之间的sy-index。 写:/sy-vline, (7):" Kunde"(004)下的" X",sy-vline, (22):" Der Kunde existiert nicht"。(002)在"名称"下,sy-vline, (18):" Ort"下的" X",sy-vline, (18):" AnzahlAufträge"下的" X",sy-vline。 ENDDO。 新队。 乌兰(78)。 新队。 万一。 结局。 ENDFORM。 "大自然保护区 页面顶部。 新队。 乌兰(78)。 新队。 写:sy-vline, (7):'Datum:'(009),sy-datum,sy-vline, (10):" Uhrzeit:"(010),sy-uzeit,sy-vline, (18):'Benutzer/in:'(011),sy-uname,sy-vline。 新队。 乌兰(78)。 新队。 写:'Gesamtdatensatz abgerufen'(008),sy-dbcnt。
我认为您可以不加入kna1和vbak,而无需在内部循环中进行检查,理想的选择是:
SY-INDEX是仅由DO和WHILE循环更新的系统计数器。
对于LOOP AT,如果该表是标准表或 排序后,您可以使用SY-TABIX。 请注意,任何READ TABLE都有可能更改它。 无论如何,您也可以使用自己的计数器变量。
PS:请不要忘记调试代码。 当前,看来您不是因为您的问题不是很精确。
嗨,
考虑到存在这样的问题,显示不存在的客户的要求没有多大意义 您可以在选择选项中有多个范围,或者客户编号可以是字母数字。
但是,从技术上讲,如果选择选项具有不扩展选项,则可以按照以下步骤进行操作...但是解决方案可能 如果选择选项的填充方式不同,则无法使用。...
lv_kunnr = s_kunnr-low。
,而lv_kunnr <= s_kunnr-high。
读取g_it_kna1 .....
如果sy-subrc = 0。
从vbak中选择...
其他。
显示"找不到客户端"。
endif。
lv_kunnr = lv_kunnr + 1
结束。
我需要编写一个满足这些要求的程序。 谢谢大家。
您似乎正在尝试报告所有没有 命令。 在这种情况下,只需在VBAK上进行选择后检查返回码,就像这样:
您有个不错的主意来发布请求,因为我"理解"了该请求,但不是您原来的问题;-)
实际上,您需要询问 请求者确认一点:SAP选择屏幕具有输入字段,其中可能包含通配符和间隔,而请求者似乎只是忽略了这一点。 那么,他的意思是忽略通配符和间隔吗? 在这种情况下,应该使用功能模块SELECT_OPTIONS_RESTRICT(UI呈现会更好)来定义功能有限的SELECT-OPTIONS。
如果要忽略它们,则意味着客户列表 数字正是要显示的列表,因此很容易。
在您的代码中,请不要忘记您必须"永不"(除非例外)必须在循环中包含SQL。
# p#感谢所有分享宝贵意见的人们。 终于自己弄对了。 我在这里向将来可能遇到相同问题的任何人共享我的代码。
@ Quynh Doan Manh
对不起,我之前没有看到您的消息。 这是ECC 6.0,依据7.01。 预先谢谢。
一周热门 更多>