SAP号码段配置-SNRO/SNUM

T-CODE: SNRO、SNUM

1.创建一个号码段对象

2.设置编号长度域、警告(注意:必须是SAP系统已定意的域)

3.设置缓冲,优点:不直接去数据库里取数,提升效率;缺点:存在跳号

4.设置取数范围

5.调整当前编号

6.调用程序

DATA:l_num TYPE i.

*锁定 
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE' 
  EXPORTING 
    object           = 'ZCURTNU' 
  EXCEPTIONS 
    foreign_lock     = 1 
    object_not_found = 2 
    system_failure   = 3 
    OTHERS           = 4.

IF sy-subrc = 0. 
*获取下个数字 
  CALL FUNCTION 'NUMBER_GET_NEXT' 
    EXPORTING 
      nr_range_nr             = '1' 

在编号范围中分配的序列号
      object                  = 'ZCURTNU' 

编码对象名称
    IMPORTING 
      number                  = l_num

输出生成的流水号
    EXCEPTIONS 
      interval_not_found      = 1 
      number_range_not_intern = 2 
      object_not_found        = 3 
      quantity_is_0           = 4 
      quantity_is_not_1       = 5 
      interval_overflow       = 6 
      buffer_overflow         = 7 
      OTHERS                  = 8. 
  IF sy-subrc <> 0. 
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ELSE. 
*解锁 
    CALL FUNCTION 'NUMBER_RANGE_DEQUEUE' 
      EXPORTING 
        object           = 'ZCURTNU' 
      EXCEPTIONS 
        object_not_found = 1 
        OTHERS           = 2. 
  ENDIF.

ENDIF.


  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较具体的问题,我可以帮您解答。 首先,我们需要先定义结构体数组,包括学生信息和选课信息: ```c #define N 100 // 定义学生最大数量 /* 学生信息结构体 */ typedef struct Student { char sname[50]; // 学生姓名 char snum[20]; // 学生学号 char ssex[10]; // 学生性别 char sage[4]; // 学生年龄 char sid[20]; // 学生身份证号 char smajor[50]; // 学生专业 } student[N]; /* 学生选课信息结构体 */ typedef struct Lesson { char snum[20]; // 选课的学生学号 char tid[20]; // 选修课程的开课号 char grade[5]; // 选修课程的成绩 } lesson[N]; ``` 接下来,我们需要实现删除学生信息的功能。首先,我们需要输入学生的学号,并判断输入是否合法(即长度是否为8位): ```c char del_num[20]; int flag = 0; // 标记是否找到了该学号对应的学生信息 /* 输入要删除的学生学号 */ do { printf("请输入要删除的学生学号(8位):"); scanf("%s", del_num); if (strlen(del_num) != 8) { printf("学号长度不合法,请重新输入!\n"); } } while (strlen(del_num) != 8); ``` 然后,我们需要遍历学生信息结构体数组,找到要删除的学生信息,并将其删除: ```c /* 遍历学生信息结构体数组 */ for (int i = 0; i < N; i++) { if (strcmp(student[i].snum, del_num) == 0) { // 找到了要删除的学生信息 printf("已删除 %s\t%s\t%s\t%s\t%s\t%s\n", student[i].snum, student[i].sname, student[i].ssex, student[i].sage, student[i].sid, student[i].smajor); for (int j = 0; j < N; j++) { // 遍历学生选课信息结构体数组 if (strcmp(lesson[j].snum, del_num) == 0) { // 找到了该学生的选课信息 printf("已删除 %s\t%s\t%s\n", lesson[j].snum, lesson[j].tid, lesson[j].grade); /* 将该选课信息删除 */ for (int k = j; k < N - 1; k++) { strcpy(lesson[k].snum, lesson[k + 1].snum); strcpy(lesson[k].tid, lesson[k + 1].tid); strcpy(lesson[k].grade, lesson[k + 1].grade); } strcpy(lesson[N - 1].snum, ""); strcpy(lesson[N - 1].tid, ""); strcpy(lesson[N - 1].grade, ""); j--; // 由于删除了一条选课信息,所以需要将j减1 } } /* 将该学生信息删除 */ for (int j = i; j < N - 1; j++) { strcpy(student[j].sname, student[j + 1].sname); strcpy(student[j].snum, student[j + 1].snum); strcpy(student[j].ssex, student[j + 1].ssex); strcpy(student[j].sage, student[j + 1].sage); strcpy(student[j].sid, student[j + 1].sid); strcpy(student[j].smajor, student[j + 1].smajor); } strcpy(student[N - 1].sname, ""); strcpy(student[N - 1].snum, ""); strcpy(student[N - 1].ssex, ""); strcpy(student[N - 1].sage, ""); strcpy(student[N - 1].sid, ""); strcpy(student[N - 1].smajor, ""); flag = 1; // 标记已经找到了该学号对应的学生信息 break; } } if (!flag) { printf("未找到该学号对应的学生信息!\n"); } ``` 最后,我们需要在程序结束前释放所有动态分配的内存: ```c /* 释放动态分配的内存 */ free(student); free(lesson); ``` 完整代码如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值