通过alv网格插入ztable之前,请检查是否存在重复(主键)。

2020-09-14 04:17发布

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

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


我有一个Ztable,其中有14个字段,其中前5个是关键字段。

我也有一个显示alv Grid的z程序。 我们可以通过工具栏上的(+)按钮,通过此Z程序在ztable中添加条目。

因此,当我通过网格输入一堆值(复制粘贴)时,我会通过内部表获得所有值。 预计该itab已经有1万行数据,加上我们通过alv网格添加的数据。

我有itab X,它有1000行,通过ALV GRID,我要插入20行。 因此,它没有1020行。 在提交即插入ztable之前,我应该检查重复项。 z表具有前6个字段作为主键。

键1、2和3是公司代码,销售组织以及通过选择屏幕显示的另一个值,这些值将通过验证得到保护。

我的代码是这样的,但是它允许重复。我想拥有最好的方法。

这是因为我已经按erdat进行了排序,但仍然允许重复。 任何想法都会大有帮助。

 DESCRIBE TABLE datatab_y LINES lv_y。(已经存在,加上新的)
   描述表datatab_x行lv_x。  (已存在于网格中)

 *插入的总行数
 *以为我可以做多次检查

   cnt = lv_y-lv_x。

   由erdat DESCENDING排序SORT datatab_y。

 循环到datatab_y。
 如果datatab_y-key3不是INITIAL。
    在新键上3。
     new_row = sy-tabix。
   Endat。
   在key3的末尾。
     检查sy-tabix> new_row。
     lv_dupflg = datatab_y-key3。
     使用lv_dupflg执行send_dupkey_msg。
   Endat。
 ELSEIF datatab_y-key4不是INITIAL。
    在新钥匙上4。
     new_row = sy-tabix。
   Endat。
   在key4的末尾。
     检查sy-tabix> new_row。
     lv_dupflg = datatab_y-key4。
     使用lv_dupflg执行send_dupkey_msg。
   Endat。
 ENDIF。

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

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


我有一个Ztable,其中有14个字段,其中前5个是关键字段。

我也有一个显示alv Grid的z程序。 我们可以通过工具栏上的(+)按钮,通过此Z程序在ztable中添加条目。

因此,当我通过网格输入一堆值(复制粘贴)时,我会通过内部表获得所有值。 预计该itab已经有1万行数据,加上我们通过alv网格添加的数据。

我有itab X,它有1000行,通过ALV GRID,我要插入20行。 因此,它没有1020行。 在提交即插入ztable之前,我应该检查重复项。 z表具有前6个字段作为主键。

键1、2和3是公司代码,销售组织以及通过选择屏幕显示的另一个值,这些值将通过验证得到保护。

我的代码是这样的,但是它允许重复。我想拥有最好的方法。

这是因为我已经按erdat进行了排序,但仍然允许重复。 任何想法都会大有帮助。

 DESCRIBE TABLE datatab_y LINES lv_y。(已经存在,加上新的)
   描述表datatab_x行lv_x。  (已存在于网格中)

 *插入的总行数
 *以为我可以做多次检查

   cnt = lv_y-lv_x。

   由erdat DESCENDING排序SORT datatab_y。

 循环到datatab_y。
 如果datatab_y-key3不是INITIAL。
    在新键上3。
     new_row = sy-tabix。
   Endat。
   在key3的末尾。
     检查sy-tabix> new_row。
     lv_dupflg = datatab_y-key3。
     使用lv_dupflg执行send_dupkey_msg。
   Endat。
 ELSEIF datatab_y-key4不是INITIAL。
    在新钥匙上4。
     new_row = sy-tabix。
   Endat。
   在key4的末尾。
     检查sy-tabix> new_row。
     lv_dupflg = datatab_y-key4。
     使用lv_dupflg执行send_dupkey_msg。
   Endat。
 ENDIF。

付费偷看设置
发送
4条回答
我是小鹏鹏啊
1楼 · 2020-09-14 05:21.采纳回答

您可以考虑在用户输入完新行后立即检查重复项(如果oo alv发生事件数据更改)。 只需比较关键字段即可,无需循环。

如果您仍然希望像现在一样进行一次签入,则应遍历插入的记录,然后使用这些键阅读原始的itab,不要知道为什么必须在AT NEW,AT END进行。

再次,您可以查看此示例报告以了解更多信息:BCALV_EDIT_04

大道至简
2楼-- · 2020-09-14 05:20

Jelena Perfiljeva 您的见解将不胜感激。 我可以在我不想使用的循环中使用循环。 请分享您的想法。 这是检查重复项的代码。

落灬小鱼
3楼-- · 2020-09-14 05:19

如果您希望没有重复项的新数据,则可以执行以下步骤。

数据:lt_list。

数据:lt_list_final。

类似于lt_list_final行的字段符号

浏览lt_list。

读取表lt_list,最后为分配键值= lt_list条目。

如果sy-subrc = 0。

"根据需要在中更改值。因为条目已经存在

其他。

"创建一个新结构并追加到lt_list_final。因为该条目不存在

endif。

endloop。

路亽曱_Ryan
4楼-- · 2020-09-14 04:56

您应该转到ST22来检查有关该转储的更多详细信息,我只能使用" CL_GUI_ALV_GRID ============== CP" 告诉什么问题。

一周热门 更多>