首页 > 其他分享 >BDC中日期数量金额格式转换

BDC中日期数量金额格式转换

时间:2023-05-25 10:23:49浏览次数:52  
标签:CONCATENATE string BDC mask INTO WHEN 日期 str2 格式

在BDC录屏中,数量和日期格式是和su3中的设置相关的,如果格式不一致BDC会报错,
例如:日期格式不一致报错

Tcode:SU3,可以看到小数点,日期格式以及时间格式的设置。

 

 

 

日期:格式 DD.MM.YYYY和中文环境不同,
小数:点好做千分位,逗号做小数点   所以需要转换

  • 1,日期&时间格式:方法1 write to ,这是个万金油,可以解决日期,数量,金额格式的问题;

DATA l_datum(10).
WRITE p_budat TO l_datum.


方法2,调用CONVERT_DATE_TO_EXTERNAL将日期转换为外部格式。

 

  • 2数量转换:注意不要忘了单位 UNIT

WRITE <lfs_alv>-romen TO gwa_stpo_r-romen UNIT <lfs_alv>-romei.

 

  • 3金额格式不一致报错:


方法1,  Write to

 DATA: lv_dmbtr TYPE BDCDATA-FVAL,

WRITE gt_bsik9-wrbtr_1 TO lv_dmbtr.
CONDENSE lv_dmbtr NO-GAPS.             

使用WRITE TO 后得到:

 

 WRITE TO  语法说明:

WRITE {source|(source_name)} TO destination
[LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED]
    { { [EXPONENT exp]
        [NO-GROUPING]
        [NO-SIGN]
        [NO-ZERO]
        [CURRENCY cur]
        { {[DECIMALS dec][ROUND scale]}|[UNIT unit]}
}
      | {[ENVIRONMENT TIME FORMAT][TIME ZONE tz]} [STYLE stl]
}
    [USING{ {NO EDIT MASK}|{EDIT MASK mask} }]
    [ DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY|DDMMYY|MMDDYY|YYMMDD ].

Write具体成什么格式的日期,这与当前用户主数据所设定的格式来显示,用户主数据日期格式可以通过以下方式获取到:

  SELECT SINGLE dcpfm INTO l_dcpfm FROM usr01 WHERE bname = sy-uname.

 

 

 

 

 

 

复制代码
DATA: date_short TYPE c LENGTH 8,
      date_long  TYPE c LENGTH 10,
      date_mask  TYPE c LENGTH 8,
      date_mask2  TYPE c LENGTH 10.
WRITE sy-datum TO: date_short,
                   date_long,
                   date_mask  USING EDIT MASK 'DD/MM/YY',
                   date_mask2 USING EDIT MASK 'DD/MM/YYYY'.

WRITE: sy-datum,
     / date_short,
     / date_long,
     / date_mask ,
     / date_mask2."
复制代码

 

 

 

 


方法2,   使用函数转换,函数效果
正数测试

负数测试



输入

输出

 

 

 函数代码

FUNCTION z_bficonver_amount_format.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_STRING)
*"     REFERENCE(I_DECIMALS) TYPE  I
*"  EXPORTING
*"     REFERENCE(OUT_STRING)
*"----------------------------------------------------------------------
*======================================================================*
*                                                                      *
*  PROGRAM        : Z_BFICONVER_AMOUNT_FORMAT                          *
*  DESCRIPTION    : Convert the amount field format                        *
*                                                                      *
*                                                                      *
*======================================================================*
*                                                                      *
*  CREATION DATE  : 14/10/2020                                         *
*  AUTHOR         : Rainy.cai                                *
*                                                                      *
*======================================================================*
*                                                                      *
*  MODIFICATIONS LIST :                                                *
*                                                                      *
*  ----------|----------|----------|---------------------------------  *
*   N° MODIF |  AUTHOR  |   DATE   | MODIFICATION DESCRIPTION         *
*  ----------|----------|----------|---------------------------------  *
*  XXXDATE   |USER      |Date      |Description text of modification   *
*  ----------|----------|----------|---------------------------------  *
** 为清账程序转换金额字段格式
  DATA:l_dcpfm   LIKE usr01-dcpfm,
       l_string  TYPE char20,
       l_reverse TYPE char20,
       l_strout  TYPE char20,
       l_str1    TYPE string,
       l_str2    TYPE string,

       l_mask    TYPE string.
  DATA:l_lenth TYPE i.
  DATA:l_lenth2 TYPE i.
  CLEAR l_mask.
  l_str2 = '___'.
  CASE i_decimals.
    WHEN 2.
      l_str1 = '__'.
    WHEN 3.
      l_str1 = '___'.
    WHEN 4.
      l_str1 = '____'.
    WHEN OTHERS.
  ENDCASE.

**处理负数情况
  IF i_string < 0.
    l_string = abs( i_string ).
  ELSE.
    l_string = i_string.
  ENDIF.
  "remove Punctuation by space
  REPLACE '.' WITH '' INTO l_string.
  CONDENSE l_string NO-GAPS.
  l_lenth = strlen( l_string ).
  l_lenth2 = l_lenth - i_decimals.

  CASE l_lenth2.
    WHEN 1 OR 2 OR 3.
    WHEN 4 OR 5 OR 6.
    WHEN OTHERS.
  ENDCASE.
  "reverse string
  CALL FUNCTION 'STRING_REVERSE'
    EXPORTING
      string  = l_string
      lang    = sy-langu
    IMPORTING
      rstring = l_reverse.


  SELECT SINGLE dcpfm INTO l_dcpfm FROM usr01 WHERE bname = sy-uname.

  CASE l_dcpfm.
    WHEN ''.
      CASE l_lenth2.
        WHEN 1 OR 2 OR 3.
          CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY ','.
        WHEN 4 OR 5 OR 6.
          CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN 7 OR 8 OR 9.
          CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN 10 OR 11 OR 12.
          CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY '.'.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN OTHERS.
      ENDCASE.
    WHEN 'X'.
      CASE l_lenth2.
        WHEN 1 OR 2 OR 3.
          CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY '.'.
        WHEN 4 OR 5 OR 6.
          CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY ','.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
        WHEN 7 OR 8 OR 9.
          CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY ','.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
        WHEN 10 OR 11 OR 12.
          CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY ','.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY '.'.
        WHEN OTHERS.
      ENDCASE.
    WHEN 'Y'.
      CASE l_lenth2.
        WHEN 1 OR 2 OR 3.
          CONCATENATE l_str1 l_str2 INTO l_mask SEPARATED BY ','.
        WHEN 4 OR 5 OR 6.
          CONCATENATE l_str2 l_str2 INTO l_mask SEPARATED BY space.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN 7 OR 8 OR 9.
          CONCATENATE l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY space.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN 10 OR 11 OR 12.
          CONCATENATE l_str2 l_str2 l_str2 l_str2 INTO l_mask SEPARATED BY space.
          CONCATENATE l_str1 l_mask INTO l_mask SEPARATED BY ','.
        WHEN OTHERS.
      ENDCASE.
  ENDCASE.

  WRITE  l_reverse USING EDIT MASK l_mask TO l_strout.

  IF sy-subrc = 0.
    "reverse string
    CALL FUNCTION 'STRING_REVERSE'
      EXPORTING
        string  = l_strout
        lang    = sy-langu
      IMPORTING
        rstring = out_string.
  ENDIF.
  IF i_string < 0.
    CONCATENATE out_string '-' into out_string.
**    out_string = out_string * -1.
  ENDIF.

ENDFUNCTION.

转自:https://www.cnblogs.com/rainysblog/p/13819977.html

标签:CONCATENATE,string,BDC,mask,INTO,WHEN,日期,str2,格式
From: https://www.cnblogs.com/BruceKing/p/17430360.html

相关文章

  • 【MySQL用法】mysql日期时间函数总结(附带mysql官网介绍)
    MySQL提供了大量丰富的函数,在MySQL的使用中经常会用到各种函数,本文记录的是常见的MySQL的日期与时间函数,主要用于处理日期和时间值。MySQL获得当前日期+时间函数获得当前日期+时间(date+time)函数:now(),SYSDATE();SELECTnow(),SYSDATE();sysdate()日期时间函数跟now()类似,区......
  • JAVA-两个日期比较大小
    packagecom.swift.ksv5;importjava.util.Date;importcn.hutool.core.date.DateUnit;importcn.hutool.core.date.DateUtil;publicclassAPP2{publicstaticvoidmain(String[]args){StringdateStr1="2023-03-01";//上......
  • 调用EasyCVR平台base64编码接口转换图片,格式出现异常是什么原因?
    EasyCVR视频融合平台基于云边端智能协同架构,具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。有用户反馈,获取通道实时快照的返回结果,放到在线转换为图片的工具中出现了转换失......
  • 1164. 指定日期的产品价格
    【题目】产品数据表:Products+---------------+---------+|ColumnName  |Type   |+---------------+---------+|product_id   |int    ||new_price    |int    ||change_date  |date   |+---------------+---------+这张表的主键是(......
  • php中日期时间字符串可以直接比较大小
    php中的日期时间字符串可以直接比较大小很多朋友还不知道,一直使用strtotime转换字符串为时间戳再比较大小。$time1='09:00';$time2='12:51';$time3='22:00';self::assertTrue($time2>$time1);self::assertTrue($time2<$time3);$date1='2021-02-03';$......
  • 调用EasyCVR平台base64编码接口转换图片,格式出现异常是什么原因?
    EasyCVR视频融合平台基于云边端智能协同架构,具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。有用户反馈,获取通道实时快照的返回结果,放到在线转换为图片的工具中出现了转换失败......
  • geojson格式数据
    可以通过一下地址验证https://geojson.io/#map=11.2/38.2756/116.7917一个面数据的情况,features是一个数组,geometry的type=Polygon表示一个面数据,可以存放多个面数据,以下就存放了一个面{"type":"FeatureCollection","features":[{"type":&quo......
  • CSI2协议-DPHY 数据格式包
       ......
  • 不同数据库的格式化日期函数
    不同数据库的格式化日期MySql1、获取当前时间selectnow()2、日期格式化#年-月-日时:分:秒SELECTDATE_FORMAT(now(),'%Y-%m-%d%H:%i:%s')具体格式参考下面:格式描述%a缩写星期名(Sun..Sat)%b缩写月名(Jan..Dec)%c月,数值(0..12)%D带有英文......
  • RAW8图像数据格式解析
    前言使用7yuv工具查看raw8图像数据,选择的格式是8bpp格式,大小是图像尺寸1280*720即可;RAW格式raw数据是sensor输出的原始数据,一般有raw8,raw10,raw12等,分别表示一个像素点有8bit、10bit、12bit数据。是sensor将光信号转化为电信号时的电平高低的原始记录,单纯地没有进行任何处......