前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP之前导0的灵活应用场景

ABAP之前导0的灵活应用场景

作者头像
百里丶落云
发布2022-12-02 14:54:02
4810
发布2022-12-02 14:54:02
举报
文章被收录于专栏:享~方法享~方法

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

HELLO ,这里是百里,一个学习中的ABAPER,在SAP系统中存在数据元素的概念,如单号,客户号,料号等等,这些数据均为固定的长度,在比较元素内容时,往往需要增加前导0,或者取消前导0.或者在用户查看时,也会要求去除对应数据的前导0内容.此时就用到去除前导0的动作.

真假前导0

真前导0的概念是如单号 vbeln = '00000010' ,通过去除前导0 ,最终获取内容为 '10' . 假前导0只是在ALV 对应的界面展示出来时为'10',但是本身值还是原来对应的值.

隐藏前导0,数据值不变

此种方式就是本身值并没有对做对应的前导0去除,可以进行对应的逻辑计算,关联取数等动作.只是在ALV展示界面内容时给用户更好的感官. 因为SAP字段8-20位的都有查看起来会很不友好.

数据定义

代码语言:javascript
复制
TABLES : VBAP .  
 
  
  
TYPES :BEGIN OF TY_DATA ,  
  VBELN TYPE VBAP-VBELN ,  
  POSNR TYPE VBAP-POSNR ,  
  MATNR TYPE VBAP-MATNR ,  
  END OF TY_DATA .  
  
DATA :GS_DATA TYPE TY_DATA .  
DATA :GT_DATA TYPE TABLE OF TY_DATA .  
  
  DATA: wa_layout   TYPE lvc_s_layo.  
DATA:wa_fieldcat TYPE lvc_s_fcat,  
     gt_fieldcat TYPE lvc_t_fcat.  
  
DATA gs_grid TYPE lvc_s_glay.   "新  
DATA:gwa_edit TYPE lvc_s_styl,  
     git_edit TYPE lvc_t_styl.

获取数据

代码语言:javascript
复制
START-OF-SELECTION .  
  
PERFORM GETDATA  .

FORM getdata .  
  
SELECT VBELN ,POSNR ,MATNR FROM VBAP INTO  TABLE @GT_DATA WHERE Vbeln in @s_vbeln .  
  
  
  
  
ENDFORM.

数据展示

代码语言:javascript
复制
FORM bulid_fieldcat .  
DEFINE add_col.  
  
*    ADD 1 TO pos.  
*    lw_fieldcat-col_pos = pos.  
    wa_fieldcat-fieldname = &1.  
    wa_fieldcat-ref_field = &2.  
    wa_fieldcat-ref_table = &3.  
    wa_fieldcat-scrtext_l = &4.  
    wa_fieldcat-outputlen = &5.  
    wa_fieldcat-no_zero = &6.  
    wa_fieldcat-edit = &7.  
    wa_fieldcat-edit_mask = &8.  
    wa_fieldcat-key = &9.  
  
  
   CASE  `wa_fieldcat`-fieldname.  
  
     WHEN 'MATCODE' OR 'MATNAME' .  
       wa_fieldcat-edit = 'X' .  
"      WHEN 'slbox'.  
" wa_fieldcat-checkbox = 'X' .  
" wa_fieldcat-edit = 'X' .  
"  wa_fieldcat-edit_mask = 'X'.  
"   WHEN 'VBELN' .  
" wa_fieldcat-HOTSPOT = 'X' .  
" WHEN 'KBETR'.  
"   wa_fieldcat-decimals_o = 2 .  
"   WHEN 'FKIMG' .  
"     wa_fieldcat-decimals_o = 0 .  
  
  
      WHEN OTHERS.  
ENDCASE .  
  
    APPEND wa_fieldcat TO gt_fieldcat.  
  
  CLEAR : wa_fieldcat.  
  END-OF-DEFINITION.  
  REFRESH: gt_fieldcat.  
  
  
  " add_col 'slbox'     space space '选项'           space space space space space.  
  add_col  'VBELN'     space space 'VBELN'           space space space space space.  
  add_col 'POSNR'     space space 'POSNR'           space space space space space.  
  add_col 'MATNR'     space space 'MATNR'           space space space '==MATN1' 'X'.  

ENDFORM.

结果

通过修改对应宏定义数据内容进行是否展示真假前导0的概念.

   wa_fieldcat-edit_mask = &8.     wa_fieldcat-key = &9. 写入内容参照料号数据中的历程. 如 matnr 的历程为 MATN1 我们就写 '==MATN1' . 如图为写了历程以后去除前导0结果和默认前导0展示的结果.

image.png
image.png
image.png
image.png

真前导0去除,对应数据值变更

此种方式是直接修改对应数值,即把原来的数据值的前导0全部去除再赋值给新的值.如果在关联,取数等逻辑时,使用该方法内容,这回出现关联失败的情况,即明明我用了关联条件,但是与另外一个取数表就是无法关联内容,一条都查不到. 此项是一个非常坑的地方.

那个这个地方有什么用呢. 目前百里使用的地方为ole下载,字符串拼接等地方,需要特意的去除对应的前导0拼接内容.

使用方式

调用函数

代码语言:javascript
复制
增加前导0
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' 
EXPORTING 
input = ls_alv-matnr 
IMPORTING
output = ls_alv-matnr.

去除前导0

CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' 
EXPORTING 
input = ls_alv-matnr 
IMPORTING
output = ls_alv-matnr.

数据处理

依然调用前面相同数据,增加LOOP循环内容,通过调用函数,真去除前导0动作,然后重新赋值到内表.

代码语言:javascript
复制
SELECT VBELN ,POSNR ,MATNR FROM VBAP INTO  TABLE @GT_DATA WHERE Vbeln in @s_vbeln .  
  
LOOP AT GT_DATA into GS_DATA.  
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'  
        EXPORTING  
          input  = GS_DATA-matnr  
        IMPORTING  
          output = GS_DATA-matnr.  
  
MODIFY GT_DATA FROM GS_DATA .  
CLEAR GS_DATA .  
  
ENDLOOP.  
  
  
ENDFORM.

结果

image.png
image.png

技术总结

本篇文章讲述了工作中会出现的经常使用前导0去除动作.是一个非常重要且容易出错的地方,经常工作中取数时,一查询不到数据就可以看下是否是因为前导0的原因造成无法取数,

失之东隅,收之桑榆 . 学习需要不断总结不断摸索. 思考及记录. 这里是百里一个努力的学习者 .

wallhaven-8xvwvo.jpg
wallhaven-8xvwvo.jpg
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 真假前导0
  • 隐藏前导0,数据值不变
    • 数据定义
      • 获取数据
        • 数据展示
          • 结果
          • 真前导0去除,对应数据值变更
            • 使用方式
              • 数据处理
                • 结果
                • 技术总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档