SAP批次号生成时,最后两位顺序号超过了99,需要和字母和数字组合生成新的批次号

背景:项目中,批次号的最后两位是顺序号,最后两位顺序号累加超过99会引起批次号重复,需要和字母结合生成批次号,比如:AAAAAA00、AAAAAA01、AAAAAA02、AAAAAA03......AAAAAA09、AAAAAA0A、AAAAAA0B......AAAAAA0Z、AAAAAA10,以下是利用ASC码进行数字字母组合的函数,希望对用到的TX有帮助。

FUNCTION ZFUNC_GET_NEW_CHARG.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(I_CHARG) LIKE  MCHA-CHARG OPTIONAL

*"  EXPORTING

*"     VALUE(O_CHARG) LIKE  MCHA-CHARG

*"     VALUE(O_MESSAGE) TYPE  CHAR20

*"----------------------------------------------------------------------

TYPES: BEGIN OF TY_ASC,

W1 TYPE I,

W2 TYPE I,

END OF TY_ASC.

*    0~9 对应48~57,A~Z 对应65~90

DATA: IT_ASC TYPE TY_ASC,

IT_ASC1 TYPE TY_ASC.

DATA: C1 TYPE C,

C2 TYPE C.

O_CHARG = I_CHARG.

IT_ASC-W1 = CL_ABAP_CONV_OUT_CE=>UCCPI( I_CHARG+6(1) ).

IT_ASC-W2 = CL_ABAP_CONV_OUT_CE=>UCCPI( I_CHARG+7(1) ).

IT_ASC1 = IT_ASC.

IT_ASC1-W2 = IT_ASC1-W2 + 1.

IF IT_ASC1-W2 = 58.

IT_ASC1-W2 = 65.

ELSEIF IT_ASC1-W2 = 91.

IT_ASC1-W2 = 48.

IT_ASC1-W1 = IT_ASC1-W1 + 1.

IF IT_ASC1-W1 = 58.

IT_ASC1-W1 = 65.

ELSEIF IT_ASC1-W1 = 91.

O_MESSAGE = ‘该批次号段已满!‘.

RETURN.

ENDIF.

ENDIF.

C1 = CL_ABAP_CONV_IN_CE=>UCCPI( IT_ASC1-W1 ).

C2 = CL_ABAP_CONV_IN_CE=>UCCPI( IT_ASC1-W2 ).

CONCATENATE C1 C2 INTO O_CHARG+6(2).

ENDFUNCTION.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 23:10:19

SAP批次号生成时,最后两位顺序号超过了99,需要和字母和数字组合生成新的批次号的相关文章

Android double输出时保留两位小数

方法1,在代码中操作 this.totalTextview = (TextView) findViewById(R.id.package_total_money); double decimalBalance = Math.round((balance/10f))/100f; DecimalFormat decimalFormat =new DecimalFormat(0.00);//构造方法的字符格式这里如果小数不足2位,会以0补足. String decimalBalanceString =

jQuery向界面输出时保留两位小数

通过JSTL下的<fmt:formatNumber>标签实现,具体实现代码如下: <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <fmt:formatNumber type="number" value="${688.87 * 0.8 }" pattern="0.00" maxFraction

JAVAWEB 生成excel文字在一格显示两位不变成#号

在处理excel的时候会发现这种问题,如果是人家给的模板还好,如果不是模板的话, 就需要进行处理了,一个小单元格,如果是一位的话,如1-9显示没有问题,一旦是两位的话, 显示的10就变成了# 结果方法是在数字前面加上 上引号 “ ’ ”就能变成文本单元格的形式就能显示正常,

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数

题目描述 输入 M N 输出 它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行 样例输入 1000 5 样例输出 31.25 2875.00 代码:#include<stdio.h>int main(){    double M,sum=0;    int N,i;    scanf("%lf%d",&M,&N);    sum=M;    for(i=2;i<=N;i++)    {                 M=M/

生成两位随机数

编写脚本生成2位的随机数,要求个位和十位数不能相同,如果遇到个位和十位相同的就退出脚本,注意十位数不能为0 count=0while truedo    num=$((RANDOM%100))    if ((((num/10))==0))    then        continue    else        if ((((num%10))==((num/10))))        then            break        else            echo num

生成ID模板:年月日时分秒+6位自增码

由于生成订单ID.商品ID 或者什么什么ID的,不想用自增,又怕重复,于是就用  年与日时分秒 + 6位自增码 (共计20位长度)来当作ID 注意:如果你的ID是Long型,就要注意,Long的最大长度为19位,如果直接转的话会有问题,建议改为年月日时分秒+5位随机数 具体代码: private static int sequence = 0; private static int length = 6; /** * YYYYMMDDHHMMSS+6位自增长码(20位) * @author sh

PHP生成订单号(产品号+年的后2位+月+日+订单号)

require '../common.inc.php'; /* * 产品号+年的后2位+月+日+订单数 * @param [Int] $prodcutId 产品号 * @param [Int] $tradeItemid 订单号 * @return [String] 返回生成订单号串 */ function getTradeNO($prodcutId,$tradeItemid){ if(!is_integer($prodcutId)||!is_integer($tradeItemid))retur

Double 数据保留两位小数一:五舍六入

1 package com; 2 3 public class T2 { 4 5 public static void main(String[] args) { 6 7 System.out.println(calculateProfit(0.233)); 8 System.out.println(calculateProfit(0.235)); 9 System.out.println(calculateProfit(0.237)); 10 System.out.println(calcul

《思考快与慢》前传,两位天才犹太心理学家的传奇人生与学术故事:4星|《思维的发现》

思维的发现:关于决策与判断的科学 全书主题是<思考快与慢>作者丹尼尔·卡尼曼和他的亲密搭档阿莫斯的传奇人生与学术故事. 两位都是心理学界的天才,都是以色列人.丹尼尔童年在巴黎生活,经历过德军占领时期,一家人东躲西藏逃过纳粹的搜捕,21岁就以心理学家的身份为以色列军队做出了巨大的贡献.后来在希伯来大学任教,遇上了以色列长大的天才阿莫斯,两人逐渐成为亲密的学术搭档,在学术上合作了15年,之后卡尼曼因为婚变搬到加拿大,阿莫斯跟着搬到美国,两人逐渐产生了隔阂…… 两位天才的人生有许多传奇,学术上的波折