ABAP—ALV 进阶:对展示数字要求负号提前、有千分符、有百分号

1、负号提前

问题描述:SAP的数据,例如金额,为负数时,负号放在数值后面,不符合一般的负号在前的读数习惯,如何把负号放到数值前面?

解决办法:使用 'CLOI_PUT_SIGN_IN_FRONT'

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
        CHANGING
          value = gs_out-menge.

注意这里要转换字符的值必须是字符类型,对外接口采用这种方式比较好用。

2、负号提前且有千分符

用户需求升级:金额 负号前置,并且加千分符。

展示效果如下:

解决办法:

参考:SAP 金额等负号提前问题_sap 负号提前-CSDN博客

操作步骤:

(1)SE37 ,命名规则如下,从Z001开始,这里Z001已用,故使用Z002。

(2)输入所属的函数组、描述、导入参数、导出参数。

(3)源代码如下,保存、激活。

FUNCTION conversion_exit_z002_output.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------DATA:output1(20),output2(20),outnum(16) TYPE p DECIMALS 2.IF input IS NOT INITIAL.outnum = input.IF input >= 0.WRITE outnum TO output1.ELSE.outnum = outnum * ( -1 ).WRITE outnum TO output1.CONCATENATE '-' output1 INTO output1.ENDIF.ELSEIF input = '0.00'.WRITE outnum TO output1.
*    CLEAR output1.ENDIF.CONDENSE output1 NO-GAPS.WRITE output1 TO output2 RIGHT-JUSTIFIED.output = output2.CLEAR : output2.
ENDFUNCTION.

(4)在设置对应的ALV格式时,针对金额添加字段类型'Z002',与上面函数命名里面的一致。

wa_fieldcat_lvc-EDIT_MASK = '==Z002'.

注意:设置负号提前类型的数据类型,不能设置为字符类型,需要设置为金额类型 CURR

详细如下:

FORM display_data .
* alv 显示定义DATA: wa_fieldcat_lvc TYPE lvc_s_fcat,i_fieldcat_lvc  TYPE lvc_t_fcat,i_layout_lvc    TYPE lvc_s_layo,i_grid_settings TYPE lvc_s_glay.DEFINE fill_alv.CLEAR  wa_fieldcat_lvc.wa_fieldcat_lvc-fieldname = &1.   "变量1 字段名wa_fieldcat_lvc-scrtext_l = &2 .  "变量2 字段编码wa_fieldcat_lvc-outputlen = &3 .  "变量3 字段描述wa_fieldcat_lvc-EDIT_MASK = &4.   "变量4 金额类型设置APPEND wa_fieldcat_lvc TO i_fieldcat_lvc .END-OF-DEFINITION.fill_alv 'NAME' '项目' '20'  '' .fill_alv 'HSLVT' '金额' '20' '==Z002' .i_grid_settings-edt_cll_cb = 'X'.          "退出可编辑单元格时回调i_layout_lvc-zebra        = 'X' .          " 使ALV界面呈现颜色交替i_layout_lvc-sel_mode     = 'A' .          " 选择模式,"A"在最左端有选择按钮i_layout_lvc-cwidth_opt   = 'X' .          " 自动优化列宽i_layout_lvc-detailinit   = 'X' .          " 是否出现细节屏幕i_layout_lvc-detailtitl   = '金额表' .     " 标题"i_layout_lvc-stylefname = 'CELLSTYLES'.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repid          " 当前程序i_callback_top_of_page   = 'TOP_OF_PAGE'i_callback_pf_status_set = 'SET_PF_STATUS'i_callback_user_command  = 'FRM_USER_COMMAND'i_grid_settings          = i_grid_settingsis_layout_lvc            = i_layout_lvc      " 属性内表it_fieldcat_lvc          = i_fieldcat_lvc[]  " 列明内表i_save                   = 'A'               " 是否保存布局TABLESt_outtab                 = gt_outEXCEPTIONSprogram_error            = 1OTHERS                   = 2.ENDFORM.                    " DISPLAY_DATA

3、显示百分号

用户需求再升级:对同比、环比数据,添加百分号。

要求效果如下:

解决办法1:直接加。当字符串处理。

DATA: ZTB(20),

            LZTB TYPE p DECIMALS 2.

LZTB = 0.02. "同比是为0.02

ZTB = | { LZTB * 100 } %|.

或者

ZTB = ( LZTB * 100 ) && '%'.

解决办法2:和上面将负号提前的方法类似,SE37创建'CONVERSION_EXIT_Z001_OUTPUT'.

(1)设置如下

(2)源代码如下:

FUNCTION conversion_exit_z001_output.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT)
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------DATA input1 TYPE p DECIMALS 1.data lv_outpt type char8.IF input > 0.input1 = input * 100.WRITE input1 TO lv_outpt.CONCATENATE lv_outpt '%' INTO   lv_outpt.output = lv_outpt.ELSE.output = lv_outpt.output = '0'.ENDIF.ENDFUNCTION.

(3)ALV设置,gt_fieldcat-EDIT_MASK = '==Z001'.

注意:设置有百分号类型的数据类型,不能设置为字符类型,需要设置为          TYPE p DECIMALS 2。

FORM display_data .
* alv 显示定义DATA: i_grid_settings TYPE lvc_s_glay,lt_fieldcat     TYPE slis_t_fieldcat_alv,lr_aggregations TYPE REF TO cl_salv_aggregations.DATA:gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,gs_layout   TYPE slis_layout_alv.* 自定义ALV 显示方式DEFINE fill_alv.clear gt_fieldcat.gt_fieldcat-fieldname = &1.  "变量1 字段名gt_fieldcat-seltext_m = &2 .  "变量2 字段描述gt_fieldcat-outputlen = &3 .  "变量2 字段描述gt_fieldcat-NO_ZERO = &4.gt_fieldcat-EDIT_MASK = &5.append gt_fieldcat.END-OF-DEFINITION.fill_alv 'MENGE1' '上月数量' '20' 'X' ''.fill_alv 'MENGE2' '本月数量' '20' 'X' ''.fill_alv 'BFB'    '环比'     '20' 'X' '==Z001'.LOOP AT gt_fieldcat.MODIFY gt_fieldcat.IF gt_fieldcat-fieldname = ' FLTIME'.gt_fieldcat-edit = 'X'.gt_fieldcat-outputlen = '50'.ENDIF.MODIFY gt_fieldcat.ENDLOOP.i_grid_settings-edt_cll_cb = 'X'. "退出可编辑单元格时回调gs_layout-zebra        = 'X'.gs_layout-colwidth_optimize = 'X'.gs_layout-box_fieldname = 'ZSEL'. "定义边框选中栏gs_layout-window_titlebar = '环比分析表'.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program       = sy-repidi_callback_pf_status_set = 'SET_PF_STATUS'i_callback_user_command  = 'FRM_USER_COMMAND'i_grid_settings          = i_grid_settingsis_layout                = gs_layoutit_fieldcat              = gt_fieldcat[]it_sort                  = lt_sorti_save                   = 'A'TABLESt_outtab                 = gt_tabEXCEPTIONSprogram_error            = 1OTHERS                   = 2.ENDFORM.                    " DISPLAY_DATA

4、总结

ALV展示时,采用'CONVERSION_EXIT_Z****_OUTPUT'' 方式,在报表展示时可以重复使用。如果对外部接口使用,在代码中需要做相应的转换。

5、注意事项

定义数据类型时,需要注意,如果是CHAR类型,在判断的时候可能有如下问题。

DATA: INPUT(20).

input = 0.05.

IF  input > 0.

        A

ELSE input = 0.

        B

ELSE.

        C

ENDIF.

这里会直接跳到B。因为类型是CHAR类型,舍去了小数点之后的数字,效果和自动向下取整一样。如果字符类型和0进行比较,需要写成 IF  input = '0'.

数字进行比较的时候,需要设置数字类型、金额类型、p类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3015557.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

QSPI的使用

Quad SPI接口(QSPI)是一种同步串行数据链路,在主模式下提供与外部设备的通信。它类似于SPI协议,只是它有额外的数据线。 普通SPI有四条通信线路:芯片选择、时钟、MOSI和MISO。对于QSPI,可提供额外的数据线。因此,命令/数据/地址是根据所选模式通过单、四或双IO发送的。由…

一个物业管理服务项目的思考——智慧停车场无人值守呼叫系统到电梯五方对讲再到呼叫中心

目录 起源智慧停车场无人值守呼叫系统然后电梯五方对讲系统又然后物业呼叫中心集控E控中心怎么做 起源 小区里新装了智慧停车场系统,马上展现出了科技化、现代化的新形象。一个显著的好处是:停车场的出入口,再也看不到司机和保安争吵的场景了…

STM32F407VET6 学习笔记2:定时器、串口、自定义串口打印函数

今日继续学习使用嘉立创购买的 立创梁山派天空星,芯片是 STM32F407VET6 因为已经有学习基础了,所以学习进度十分快,这次也是直接一块学习配置定时器与串口了,文章也愈来愈对基础的解释越来越少了...... 文章提供测试代码讲解、完…

什么是企业出海?

本文节选自Odoo亚太金牌服务机构【开源智造】所编写的《企业数字化百科大全》如需获取完整的知识内容,请至开源智造官网免费获取。感谢网友一键三连:点赞、转发、收藏,您的支持是我们最大的前进动力! 企业出海是什么意思&#xff…

idea Maven 插件 项目多环境打包配置

背景 不同环境的配置文件不一样,打包方式也有差异 1. 准备配置文件 这里 local 为本地开发环境 可改为 dev 名称自定义 test 为测试环境 prod 为生产环境 根据项目业务自行定义 application.yml 配置: spring:profiles:#对应pom中的配置active: spring.…

指代消解类方法梳理

概念: MLM:带遮罩的语言模型 NSP:单句预测,任务包括两个输入序列 SBO:分词边界目标 1.spanBERT,2019 spanBERT是对bert从分词到文本跨度的优化,主要有两方面的优化:&#xff08…

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用

今天在打包vue2项目时,遇到一个报错: 最关键的代码如下: Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…

【Vue】pinia

pinia 官网:https://pinia.vuejs.org/zh/ 搭建 pinia 环境 第一步:npm install pinia --save 第二步:操作src/main.ts import { createApp } from vue import App from ./App.vue/* 引入createPinia,用于创建pinia */ import { createP…

idea提示 CreateProcess error=206, 文件名或扩展名太长有哪些具体的解决方法

背景: 项目启动后提示CreateProcess error206,通常我本地是将shorten command line改成如下就可以解决,但是今天遇到一个,无论这里怎么设置都是启动提示扩展名太长,经过一番处理问题终于解决,特此记录一下。…

基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真程序设计报告原理图讲解视频) 这里写目录标题 1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 仿真图proteus7.8及以上 程序…

Compose 状态管理

文章目录 Compose 状态管理概述使用MutableStaterememberStatelessComposable & StatefulComposable状态提升rememberSaveable支持parceable不支持parceable 使用ViewModelViewModelProvider.Factory 使用Flow Compose 状态管理 概述 当应用程序的状态发生变化时&#xf…

第五章 TypeScript泛型的介绍和使用

文章目录 一、泛型初识泛型泛型用法 二、断言 一、泛型 初识泛型 一个函数,需要参数是 number 数据类型,返回值也是 number 数据类型 function fn(arg: number): number { // 代码忽略不计 }又一个函数,需要参数是 string 类型&#xff0…

docker安装Debian:11 freeswitch1.10.5

文章目录 一、生成一个镜像二、切换一个镜像源为阿里源三、安装一些相关依赖和freeswitch3.1第一步:安装freeswitch-mod和下载所需的依赖项3.2 设置密钥3.3 安装freeswitch所需的依赖项3.4 报错3.4.1 报错13.4.2 报错23.4.3 报错3 四、运行4.1 通话三十秒自动挂断 一…

Linux 第二十二章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

嵌入式学习<1>:建立工程、GPIO

嵌入式学习_part1 本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程 建立工程、GPIO 开发环境:keil MDK、STM32F103C8T6 1 )建立工程 (1)基于寄存器开发、基于标准库 或者 基于HAL库开发; &…

10种软件架构模式解析

1. 单体应用架构(Monolithic Architecture) 👌单体应用架构是最基本的架构模式,它将整个应用作为一个单独的部署单元。所有功能和模块都集成在一个应用中,易于开发和部署,但随着应用的增长,可维…

java.lang.NoSuchMethodException: com.ruoyi.web.controller.test.bean.HeadTeacher

软件开发过程中使用Java反射机制时遇到了下面的问题 com.ruoyi.web.controller.test.bean.HeadTeacher4b9af9a9 com.ruoyi.web.controller.test.bean.HeadTeacher4b9af9a9java.lang.NoSuchMethodException: com.ruoyi.web.controller.test.bean.HeadTeacher.<init>(java…

python判断大图中包含小图并输出位置总结

python判断大图中包含小图并输出位置总结 没啥可说的&#xff0c;项目遇到了就直接上代码&#xff0c;可以减轻劳动力&#xff0c;花最少得时间实现应用功能。 import cv2 # 读取大图片和小图片的路径 img_big cv2.imread(big_image.png) img_small cv2.imread(small_image…

【方法】如何创建RAR格式压缩文件?

为了方便存储或者传输文件&#xff0c;我们经常会把文件打包成不同格式的压缩包&#xff0c;那如果想创建的是RAR格式的压缩包&#xff0c;要如何做呢&#xff1f; RAR是WinRAR软件独有的压缩格式&#xff0c;所以我们可以通过WinRAR软件来创建RAR格式压缩包。下面分享两种创建…

视频素材哪个app好?8个视频素材库免费使用

视频内容已成为现代传播中不可或缺的一部分&#xff0c;具备卓越的视频素材对于提升任何媒体作品的质量和吸引力尤为关键。这里列举的一系列精挑细选的全球视频素材网站&#xff0c;旨在为您的商业广告、社交媒体更新或任何其他类型的视觉项目提供最佳支持。 1. 蛙学府&#x…