保存之前在表维护生成器中进行字段验证

2020-08-30 17:28发布

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

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


大家好,

对于ABAP来说还很陌生,并且想要实现以下内容:

在可以输入数据的维护视图中,我想检查组成特定公司代码的sum()是否为=> 1.00(100%)。

该表如下所示:


公司; 代码值
01; 0.3
01; 0.4
01; 0.3
02; 0.2
02; 0.2
02; 0.2
02; 0.2
02; 0,199

用户只能填写由一个公司代码组成的值,最大为1.00。 例如,如果现在尝试输入公司代码为2的行; 0.3->不应保存,并且错误应表明该值只能为1。

我正在考虑向维护视图中添加一个before_save检查,如下所示:


FORM form_03_CHECK_VALUES。

数据:l_value TYPE值。
选择总和(值)
FROM表
INTO l_value
按公司代码分组

IF l_value> 1.
消息'错误'类型'E'显示为'S'。
ENDIF。

ENDFORM。



但是,由于我不是ABAP的新手,所以我想我在这里误解了一些概念。 有人可以帮我吗?

高度赞赏,

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

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


大家好,

对于ABAP来说还很陌生,并且想要实现以下内容:

在可以输入数据的维护视图中,我想检查组成特定公司代码的sum()是否为=> 1.00(100%)。

该表如下所示:


公司; 代码值
01; 0.3
01; 0.4
01; 0.3
02; 0.2
02; 0.2
02; 0.2
02; 0.2
02; 0,199

用户只能填写由一个公司代码组成的值,最大为1.00。 例如,如果现在尝试输入公司代码为2的行; 0.3->不应保存,并且错误应表明该值只能为1。

我正在考虑向维护视图中添加一个before_save检查,如下所示:


FORM form_03_CHECK_VALUES。

数据:l_value TYPE值。
选择总和(值)
FROM表
INTO l_value
按公司代码分组

IF l_value> 1.
消息'错误'类型'E'显示为'S'。
ENDIF。

ENDFORM。



但是,由于我不是ABAP的新手,所以我想我在这里误解了一些概念。 有人可以帮我吗?

高度赞赏,

付费偷看设置
发送
4条回答
骆驼绵羊
1楼-- · 2020-08-30 18:05

您可以实现事件01(在保存之前),但是数据尚未保存在数据库中,而是在内部表TOTAL中。 它具有一种特殊的格式,您必须首先将其转换为具有可用格式的内部表,如下所示。 我使用的名称与Mike提议的名称相同(LT_VAL_BUK)。

 FORM z_before_saving。
  字段符号键入name_of_your_table。
  数据lt_val_buk类型name_of_your_table。

  合计。
    将总计分配给转换。
    将附加到lt_val_buk。
  结局。

  "找到错误的算法-按照迈克说的或您想要的算法进行

  如果错误= abap_true。
    消息"错误"类型为" S",显示为" E"。
    VIM_ABORT_SAVING ='X'。  "万一出错,请不要离开
  万一。

  sy-subrc =0。"仅在sy-subrc = 0时保存
 ENDFORM。
compass1988
2楼-- · 2020-08-30 18:21

您的代码看起来不错,您可以使用消息类型玩,以更改sy-subrc或直接影响变量SPAN vim_abort_saving

(vim_abord_saving = abap_true)

梦想连接
3楼-- · 2020-08-30 18:05

嗨Franziskus,

几种方法可以做到这一点。 我只是简单地介绍一下,假设您提到"表格"后就使用"经典" ABAP。

 *假设内部输入数据表类似于:
 类型:开始于tys_val_buk,
          TYPE BUKRS,
          val TYPE p十进制2,
        结束于tys_val_buk,
        tyt_val_buk tys_val_buk的类型标准表。
 
*您可以定义一个结果集: 类型:tyt_res_buk类型分类表 与关键bukrs。 数据:lt_val_buk TYPE tyt_val_buk, lt_res_buk类型tyt_res_buk。 *您可以这样拨打您的表格: 使用lt_val_buk执行check_buk_val 更改lt_res_buk。 *做您想评估BUKRS/FLAG组合的结果列表的任何事情。 *您的表格可能如下所示: FORM check_buk使用it_val_buk TYPE tyt_val_buk 更改ct_res_buk TYPE tyt_res_buk。 数据lt_val类型tyt_val_buk。 数据lf_val TYPE p十进制数2。 FIELD-SYMBOLS:类型tys_val_buk。 *确保所有公司代码都在一起 lt_val = it_val_buk。 排序lt_val BY Bukrs。 *在lt_val评估时评估
循环。 *组更改。 记住所有总和> = 1的公司的结果。 在新的bukrs。 如果lf_val> = 1.
插入 -bukrs INTO ct_res_buk。
ENDIF。
清除lf_val。 ENDAT。 *累积值 lf_val = lf_val + -val。 结局。 ENDFORM。

当然,可以使用ABAP OO更好地解决此问题,但是我们还没有解决。。。。。。。。。。

此外,为了将来参考,并且为了更好地熟悉ABAP概念,请查看ABAP帮助,例如:

https://help.sap.com/saphelp_47x200/ helpdata/zh-CN/d3/2e974d35c511d1829f0000e829fbfe/frameset.htm

希望让您入门,
迈克

空代码
4楼-- · 2020-08-30 18:00

您好 Franziskus Heep

对于您选择的事件表示怀疑,如果也不要尝试事件05,请检查它是否工作正常,并让我们知道成功的案例。

一周热门 更多>