如何显示丢失的信息消息以及获取的信息?

2020-09-03 20:02发布

         点击此处--->   EasySAP.com群内免费提供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。

         点击此处--->   EasySAP.com群内免费提供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。
付费偷看设置
发送
10条回答
半个程序猿
1楼 · 2020-09-03 20:37.采纳回答

我认为您可以不加入kna1和vbak,而无需在内部循环中进行检查,理想的选择是:

 SELECT kna1〜KUNNR
       ,kna1〜NAME1
       ,kna1〜ORT01
       ,COALESCE(vbak〜VBELN,'未找到')作为vbeln
  从kna1左外连接vbak ON(kna1〜kunnr = vbak〜kunnr)
   在@s_kunnr中的kna1〜kunnr
   vbak〜VBELN订购
   INTO TABLE @DATA(customer_info)。
haha101010
2楼-- · 2020-09-03 20:41

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

结束。

zhangjiyang1323
4楼-- · 2020-09-03 21:01

我需要编写一个满足这些要求的程序。 谢谢大家。

哎,真难
5楼-- · 2020-09-03 20:41

您似乎正在尝试报告所有没有 命令。 在这种情况下,只需在VBAK上进行选择后检查返回码,就像这样:

 SELECT COUNT(*)
   INTO安扎尔
   从VBAK
  哪里KUNNR = g_wa_kna1-KUNNR
 GROUPBY KUNNR。
 ENDSELECT。

 如果sy-subrc =0。"客户有订单

 其他。  "客户没有订单

 ENDIF。
bbpeas
6楼-- · 2020-09-03 20:58

您有个不错的主意来发布请求,因为我"理解"了该请求,但不是您原来的问题;-)

实际上,您需要询问 请求者确认一点:SAP选择屏幕具有输入字段,其中可能包含通配符和间隔,而请求者似乎只是忽略了这一点。 那么,他的意思是忽略通配符和间隔吗? 在这种情况下,应该使用功能模块SELECT_OPTIONS_RESTRICT(UI呈现会更好)来定义功能有限的SELECT-OPTIONS。

如果要忽略它们,则意味着客户列表 数字正是要显示的列表,因此很容易。

在您的代码中,请不要忘记您必须"永不"(除非例外)必须在循环中包含SQL。

# p#

感谢所有分享宝贵意见的人们。 终于自己弄对了。 我在这里向将来可能遇到相同问题的任何人共享我的代码。

报告:z_XYZ

 类型:开始于g_ty_kna1,
         KUNNR TYPE KUNNR,
         NAME1 TYPE NAME1,
         ORT01类型ORT01,
        g_ty_kna1结束。


 类型:开始于g_ty_vbak,
          KUNNR TYPE KUNNR,
          VBELN TYPE VBELN,
        结束于g_ty_vbak。

 数据:g_ty_kna1的g_it_kna1类型标准表,
         g_wa_kna1类型g_ty_kna1,
         g_kunnr TYPE kna1-KUNNR,
         g_ty_vbak的g_it_vbak类型标准表,
         g_wa_vbak类型g_ty_vbak,
         G_R_KUNDE KUNNR的TYPE RANGE,
         g_wa_KUNDE,例如G_R_KUNDE,
         g_anzahl TYPE i。

 带有框架标题text-001的Eingabe块的选择屏幕开始。
 SELECT_OPTIONS s_kunnr for g_kunnr没有间隔。
 Eingabe区块的选择屏幕结束。

 在选择屏幕上。


   如果s_kunnr是INITIAL并且sy-ucomm ='ONLI'。
     消息'Bitte geben Sie eine Kundennummer an。'(003)TYPE'E'。
   万一。

 选择开始。

   执行Datenerfassung。
   执行日期。

 *&------------------------------------------------  --------------------- *
 *&表格Datenerfassung
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *

 表格Datenerfassung。

   选择昆纳名称1 ORT01
    从KNA1
    表g_it_kna1的对应字段
    s_kunnr中的KUNNR。
 
如果sy-subrc是INITIAL。 从VBAK中选择KUNNR VBELN 表g_it_vbak的对应字段 对于g_it_kna1中的所有条目 在哪里KUNNR EQ g_it_kna1-kunnr。 万一。 ENDFORM。 " Datenerfassung *&------------------------------------------------ --------------------- * *&表格日期和日期 *&------------------------------------------------ --------------------- * *文字 * ------------------------------------------------- --------------------- *
FORM Datenverarbeitung。
NEW-LINE。 乌兰(ULINE)(87)。 新队。 写:sy-vline, (8):'Kunde'(004),sy-vline, (30):"名称"(005),sy-vline, (18):" Ort"(006),sy-vline, (18):" AnzahlAufträge"(007),sy-vline。 新队。 乌兰(ULINE)(87)。 新队。 环回s_kunnr INTO g_wa_kunde。 使用键kunnr = g_wa_kunde-low将表g_it_kna1读入g_wa_kna1。 如果sy-subrc = 0。
清除g_anzahl。
将g_it_vbak循环到g_wa_vbak,其中KUNNR = g_wa_kna1-kunnr。 g_anzahl = g_anzahl + 1。 *将1加到g_anzahl。 结局。 写:sy-vline, (8):g_wa_kna1-kunnr,sy-vline, (30):g_wa_kna1-NAME1,sy-vline, (18):g_wa_kna1-ORT01,sy-vline, (18):g_anzahl,sy-vline。 新队。 乌兰(ULINE)(87)。 新队。 其他。 写:/sy-vline, (8):g_wa_kunde-low Under'Kunde'(004),sy-vline, (30):" Der Kunde existiert nicht"。(002)在"名称"下(005),sy-vline, (18):"在'Ort'下,sy-vline, (18):" AnzahlAufträge"(007)下的" 0",sy-vline。 新队。 乌兰(ULINE)(87)。 新队。 万一。 结局。 ENDFORM。 " Datenverarbeitung
天桥码农
7楼-- · 2020-09-03 20:39

@ Quynh Doan Manh

对不起,我之前没有看到您的消息。 这是ECC 6.0,依据7.01。 预先谢谢。

一周热门 更多>