SAP 变更记录表查询使用逻辑简介

news2024/10/6 2:26:12

通常用户在遇到问题后,经常会问某个单据的变更记录,很多模块中在前台的操作界面中都根据对应的菜单栏中可以找到对应的变更记录,像销售订单、交货单、采购申请、采购订单都在菜单栏位中都可以查询到对应的修改记录,但是对于想批量查询一些单据的变更记录就要涉及自定义的开发了。

SAP 变更记录基本都会存在两张表中

更改凭证抬头—CDHDR
更改凭证项目—CDPOS
更改文档创建的对象—TCDOB

我们以销售订单的变更记录和交货单的变更记录进行演示

我们在查询表CDHDR的时候,首先就需要知道文档对象,不同的业务场景存在不同的文档对象
在这里插入图片描述
我们可以通过表TCDOB查询到对应业务场景中的文档对象,输入对应的后台表名称,如下图我们填写VBAP销售订单的后台表名称,然后执行

在这里插入图片描述
可以查询到销售订单的文档对象就是VERKBELEG在这里插入图片描述

同理:
交货单的文档对象就是:LIEFERUNG
采购申请:BANF
采购订单:EINKBELEG

然后我们在查询的时候就可以通过对象类型进行取值
如下图
对象值的位置填写的就是交货单的单号
在这里插入图片描述
然后就可以查到这个交货单的变更记录
在这里插入图片描述
我们可以根据 表+字段名来确定我们更改的是什么内容

在这里插入图片描述
以下代码是用于查询销售订单交货单变更记录查询的代码:

*&---------------------------------------------------------------------*
*& Report ZSDR027
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSDR027.

TABLES:vbak,cdhdr,cdpos,likp.
TYPES:BEGIN OF ty_cdhp,
        objectclas TYPE  cdhdr-objectclas  , " 更改文档对象
        objectid   TYPE  cdhdr-objectid  , " 对象值
        changenr   TYPE  cdhdr-changenr  , " 文档编号
        username   TYPE  cdhdr-username  , " 用户
        udate      TYPE  cdhdr-udate , " 日期
        utime      TYPE  cdhdr-utime , " 时间
        tcode      TYPE  cdhdr-tcode , " 事务
        planchngnr TYPE  cdhdr-planchngnr  , " 更改号
        act_chngno TYPE  cdhdr-act_chngno  , " 文档编号
        was_plannd TYPE  cdhdr-was_plannd  , " 已创建
        change_ind TYPE  cdhdr-change_ind  , " 应用对象变更
        langu      TYPE  cdhdr-langu , " 语言
        version    TYPE  cdhdr-version , " 三字节字段
        tabname    TYPE  cdpos-tabname , " 表名
        tabkey     TYPE  cdpos-tabkey  , " 表键
        fname      TYPE  cdpos-fname , " 字段名
        chngind    TYPE  cdpos-chngind , " 更改标识符
        text_case  TYPE  cdpos-text_case , " 文本标志
        unit_old   TYPE  cdpos-unit_old  , " 单位
        unit_new   TYPE  cdpos-unit_new  , " 单位
        cuky_old   TYPE  cdpos-cuky_old  , " 货币代码
        cuky_new   TYPE  cdpos-cuky_new  , " 货币代码
        value_new  TYPE  cdpos-value_new , " 新值
        value_old  TYPE  cdpos-value_old , " 旧值
      END OF ty_cdhp.
DATA: gt_cdhp TYPE TABLE OF ty_cdhp WITH HEADER LINE  .

DATA: gt_likp TYPE TABLE OF ty_cdhp WITH HEADER LINE  .

TYPES: BEGIN OF gy_show,
         objectclas    TYPE  cdhdr-objectclas  , " 更改文档对象
         objectid      TYPE  cdhdr-objectid  , " 对象值
         changenr      TYPE  cdhdr-changenr  , " 文档编号
         username      TYPE  cdhdr-username  , " 用户
         udate         TYPE  cdhdr-udate , " 日期
         utime         TYPE  cdhdr-utime , " 时间
         tcode         TYPE  cdhdr-tcode , " 事务
         tabname       TYPE  cdpos-tabname , " 表名
         tabkey        TYPE  cdpos-tabkey  , " 表键
         fname         TYPE  string , " 字段名
         chngind       TYPE  cdpos-chngind , " 更改标识符
         text_case     TYPE  cdpos-text_case , " 文本标志
         unit_old      TYPE  cdpos-unit_old  , " 单位
         unit_new      TYPE  cdpos-unit_new  , " 单位
         cuky_old      TYPE  cdpos-cuky_old  , " 货币代码
         cuky_new      TYPE  cdpos-cuky_new  , " 货币代码
         value_new     TYPE  cdpos-value_new , " 新值
         value_old     TYPE  cdpos-value_old , " 旧值
         box           TYPE c,
         name_text(25) ,
         posnr         TYPE vbep-posnr,
         etenr         TYPE vbep-etenr,
         matnr         TYPE mara-matnr, "物料
         maktx         TYPE makt-maktx, "物料描述
         KUNNR         TYPE KNA1-KUNNR, "客户
         NAME1         TYPE KNA1-NAME1, "客户描述
         VKBUR         TYPE VBAK-VKBUR,  "销售办公室
        BEZEI1         TYPE TVKBT-BEZEI, "销售办公室描述
         VKGRP         TYPE VBAK-VKGRP, "销售组
        BEZEI          TYPE TVGRT-BEZEI, "销售组描述
        NETWR          TYPE VBAP-NETWR, "订单未税金额
        WAERK          TYPE vbap-WAERK, "币别
        LFIMG          TYPE lips-LFIMG, "交货单数量
        VBELN          TYPE VBAP-VBELN,
        POSNR1          TYPE VBAP-POSNR,
       END OF gy_show.
DATA gt_show TYPE TABLE OF gy_show WITH HEADER LINE.
DATA it_show TYPE TABLE OF gy_show WITH HEADER LINE.

DATA: gs_layout   TYPE lvc_s_layo,
      gt_fcat_lvc TYPE lvc_t_fcat,
      gs_fcat_lvc TYPE lvc_s_fcat.
TYPES:BEGIN OF ty_user,
        bname      TYPE usr21-bname,
        persnumber TYPE usr21-persnumber,
        name_first TYPE adrp-name_first,
        name_last  TYPE adrp-name_last,
        name_text  TYPE string,
      END OF ty_user.
DATA:it_user TYPE TABLE OF ty_user WITH HEADER LINE.
DATA:it_user1 TYPE TABLE OF ty_user WITH HEADER LINE.

DEFINE set_fieldcat.
  CLEAR gs_fcat_lvc .
  gs_fcat_lvc-fieldname = &1."内表的字段
  gs_fcat_lvc-outputlen = &2."输出长度
  gs_fcat_lvc-scrtext_l = &3."在ALV里面显示的名字
  gs_fcat_lvc-just      = &4."水平对齐方式,L左对齐,R右对齐。
  gs_fcat_lvc-no_zero   = &5."去除前导零
  gs_fcat_lvc-checkbox  = &6."checkbox
  gs_fcat_lvc-edit      = &7.
  APPEND gs_fcat_lvc TO gt_fcat_lvc .
END-OF-DEFINITION.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:
    r1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND ucom,
    r2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln  MODIF ID p1,
                s_uname FOR gt_show-name_text LOWER CASE MODIF ID p1,
                s_datum FOR cdhdr-udate MODIF ID p1.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
  SELECT-OPTIONS:
                 S_VBELN1 for  LIKP-VBELN  MODIF ID p0,
                 s_uname1 FOR gt_show-name_text LOWER CASE MODIF ID p0,
                 s_datum1 FOR cdhdr-udate MODIF ID p0.

SELECTION-SCREEN END OF BLOCK b3.


INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
  "修改屏幕
  PERFORM frm_modify_screen.
START-OF-SELECTION.
FORM frm_modify_screen.
  LOOP AT SCREEN.
    IF r1 = 'X'.
      IF screen-group1 = 'P0'.
        screen-active = '0'.
      ENDIF.
      IF screen-name = 'S_IDNRK-LOW'.
        screen-required = '2'.
      ENDIF.

    ELSEIF r2 = 'X'.
      IF screen-group1 = 'P1'.
        screen-active = '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.

START-OF-SELECTION.
  CASE 'X'.
    WHEN r1.

  PERFORM fvm_uname .
  PERFORM fvm_getdata.
  PERFORM fvm_alv.

    WHEN r2.
     PERFORM fvm_uname1 .
     PERFORM fvm_getlikp.
     PERFORM fvm_alv1.

    WHEN OTHERS.
  ENDCASE.

END-OF-SELECTION.





FORM fvm_getdata.
  SELECT
      cdhdr~objectclas
      cdhdr~objectid
      cdhdr~changenr
      cdhdr~username
      cdhdr~udate
      cdhdr~utime
      cdhdr~tcode
      cdhdr~planchngnr
      cdhdr~act_chngno
      cdhdr~was_plannd
      cdhdr~change_ind
      cdhdr~langu
      cdhdr~version
      cdpos~tabname
      cdpos~tabkey
      cdpos~fname
      cdpos~chngind
      cdpos~text_case
      cdpos~unit_old
      cdpos~unit_new
      cdpos~cuky_old
      cdpos~cuky_new
      cdpos~value_new
      cdpos~value_old
    INTO CORRESPONDING FIELDS OF TABLE  gt_cdhp
    FROM cdhdr
    INNER JOIN cdpos   ON cdpos~objectclas = cdhdr~objectclas
    AND cdpos~objectid = cdhdr~objectid
    AND cdpos~changenr = cdhdr~changenr
    WHERE cdhdr~objectid IN s_vbeln
      AND cdhdr~udate IN s_datum
      AND cdhdr~objectclas = 'VERKBELEG'  "销售订单
      AND cdhdr~langu = sy-langu
      AND cdpos~fname IN ('CMWAE','FKDAT','ZTERM','KUNNR','MATNR','KDMAT','WMENG','CMPRE','EDATU').
  SORT gt_cdhp BY objectid  tabkey udate utime.


    SELECT VKGRP , BEZEI
      INTO TABLE @DATA(LT_TVGRT)
      FROM TVGRT
     WHERE SPRAS = '1'.

    SELECT VKBUR , BEZEI
      INTO TABLE @DATA(LT_TVKBT)
      FROM TVKBT
     WHERE SPRAS = '1'.




 SELECT
        VKBUR_ANA ,"销售办事处
        VKGRP_ANA  ,
          VBELN ,  "销售凭证
          POSNR  ,  "凭证项目
         MATNR ,  "物料编号
          ARKTX ,   "物料描述
       NETWR   ,       "订单未税金额
        WAERK  ,       "币别
        KUNNR_ANA

   INTO TABLE @DATA(LT_ZVBAP)
   FROM VBAP
*   INNER JOIN TVGRT on TVGRT~VKGRP = vbap~VKGRP_ANA
   WHERE
    VBAP~VBELN in @s_vbeln
    .
sort LT_ZVBAP by VBELN POSNR.

SELECT KUNNR , NAME1
      INTO TABLE @DATA(LT_KNA1)
      FROM KNA1
  FOR ALL ENTRIES IN @LT_ZVBAP
     WHERE
  KNA1~KUNNR = @LT_ZVBAP-KUNNR_ANA .

SORT LT_KNA1 by kunnr.

  LOOP AT gt_cdhp .
    MOVE-CORRESPONDING gt_cdhp TO gt_show.
    READ TABLE it_user WITH KEY bname = gt_cdhp-username BINARY SEARCH.
    IF sy-subrc = 0.
      gt_show-name_text = it_user-name_text.
    ENDIF.

    IF gt_show-name_text NOT IN s_uname[]  AND  gt_cdhp-username NOT IN s_uname[].
      CLEAR gt_cdhp.
      CONTINUE.
    ENDIF.
    CASE gt_cdhp-fname.
      WHEN  'CMWAE' .
        gt_show-fname =  '货币'.
      WHEN  'BSTKD' .
        gt_show-fname =  '客户参考'.
      WHEN  'ZTERM' .
        gt_show-fname =  '付款方式'.
      WHEN  'KUNNR' .
        IF gt_cdhp-tabname = 'VBAK'.
          gt_show-fname =  '售达方'.
        ELSEIF gt_cdhp-tabname = 'VBPA'..
          gt_show-fname =  '送达方'.
        ENDIF.
      WHEN  'MATNR' .
        gt_show-fname =  '物料'.
      WHEN  'KDMAT' .
        gt_show-fname =  '客户物料编号'.
      WHEN  'WMENG' .
        gt_show-fname =  '订单数量'.
      WHEN  'CMPRE' .
        gt_show-fname =  '金额'.
      WHEN  'EDATU' .
        gt_show-fname =  '首个交货日期'.
      WHEN OTHERS.
        gt_show-fname = ''.
    ENDCASE.
    IF gt_show-fname = ''.
      CONTINUE.
    ENDIF.

    gt_show-posnr =  gt_show-tabkey+13(6).
    gt_show-etenr = gt_show-tabkey+19(4).
    APPEND gt_show.
    CLEAR:gt_cdhp, gt_show .
  ENDLOOP.

  LOOP at gt_show.
     READ TABLE LT_ZVBAP INTO DATA(LS_ZVBAP) WITH KEY VBELN = gt_show-objectid
                                                      POSNR = gt_show-POSNR BINARY SEARCH.
    IF sy-subrc = 0.
      gt_show-MATNR = LS_ZVBAP-matnr.
      gt_show-MAKTX = LS_ZVBAP-ARKTX.
      gt_show-NETWR = LS_ZVBAP-NETWR.
      gt_show-WAERK = LS_ZVBAP-WAERK.
      gt_show-VKBUR = LS_ZVBAP-VKBUR_ANA.
      gt_show-VKGRP = LS_ZVBAP-VKGRP_ANA.

    ENDIF.

     READ TABLE LT_ZVBAP INTO DATA(LS_ZVBAP1) WITH KEY VBELN = gt_show-objectid  BINARY SEARCH.
 IF sy-subrc = 0.
    gt_show-KUNNR = LS_ZVBAP1-KUNNR_ANA.

    endif.
   MODIFY gt_show.
  endloop.

    LOOP at gt_show.
     READ TABLE LT_TVGRT INTO DATA(LS_TVGRT) WITH KEY VKGRP = gt_show-VKGRP
                                                       BINARY SEARCH.
    IF sy-subrc = 0.

      gt_show-BEZEI1 = LS_TVGRT-BEZEI.
    ENDIF.

     READ TABLE LT_TVKBT INTO DATA(LS_TVKBT) WITH KEY VKBUR = gt_show-VKBUR
                                                       BINARY SEARCH.
    IF sy-subrc = 0.

      gt_show-BEZEI = LS_TVKBT-BEZEI.
    ENDIF.

     READ TABLE LT_KNA1 INTO DATA(LS_KNA1) WITH KEY KUNNR = gt_show-KUNNR
                                                       BINARY SEARCH.
    IF sy-subrc = 0.

      gt_show-name1 = LS_KNA1-name1.
    ENDIF.

   MODIFY gt_show.
  endloop.


ENDFORM.

FORM fvm_alv .
  PERFORM set_layout.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_layout .
  gs_layout-no_toolbar = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.
  gs_layout-box_fname = 'BOX'.
  REFRESH gt_fcat_lvc .
  set_fieldcat:
                   'KUNNR'   '' '客户'    '' 'X' '' '',
                  'NAME1'   '' '客户名称'    '' 'X' '' '',
                  'OBJECTID'   '' '销售订单'    '' 'X' '' '',
*                'OBJECTCLAS'   '' '更改文档对象'    '' 'X' '' '',
*                'CHANGENR'   '' '文档编号'    '' 'X' '' '',
*                'TABKEY'     '' '表键'   '' 'X' '' '',
                'POSNR'      '' '项目'   '' 'X' '' '',
                'VKBUR'      '' '销售办公室'   '' 'X' '' '',
                'BEZEI'      '' '销售办公室描述'   '' 'X' '' '',
                'VKGRP'      '' '销售组'   '' 'X' '' '',
                'BEZEI1'      '' '销售组描述'   '' 'X' '' '',
                'MATNR'      '' '物料'   '' 'X' '' '',
                'MAKTX'      '' '物料描述'   '' 'X' '' '',
                'NETWR'      '' '订单未税金额' '' 'X' '' '',
                'WAERK'      '' '币别' '' 'X' '' '',
                'USERNAME'   '' '用户'   '' 'X' '' '',
                'NAME_TEXT'  '' '用户名'   '' 'X' '' '',
                'UDATE'      '' '日期'    '' 'X' '' '',
                'UTIME'      '' '时间'   '' 'X' '' '',
                'TCODE'      '' '事务码' '' 'X' '' '',
                'TABNAME'    '' '表名'    '' 'X' '' '',
                'FNAME'      '' '字段名'  '' 'X' '' '',
*                'CHNGIND'    '' '更改标志' '' 'X' '' '',
                'VALUE_NEW'  '' '新值' '' 'X' '' '',
                'VALUE_OLD' '' '旧值'  '' 'X' '' '' .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
*     i_callback_pf_status_set = 'FRM_PF_STATUS'
*     i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc      = gs_layout
      it_fieldcat_lvc    = gt_fcat_lvc
      i_save             = 'A'
    TABLES
      t_outtab           = gt_show
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.




ENDFORM.
*&---------------------------------------------------------------------*
*& Form FVM_UNAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM fvm_uname .
  DATA gc_string TYPE string .
  RANGES: gs_uname FOR gt_show-name_text.
  LOOP AT s_uname . "大小写
    gc_string  = s_uname-low .
    TRANSLATE gc_string TO UPPER CASE  .
    IF gc_string <> s_uname-low .
      gs_uname-sign = 'I'.
      gs_uname-option = 'EQ'.
      gs_uname-low = gc_string. "大写的
      APPEND gs_uname .
    ENDIF.
  ENDLOOP.
  LOOP AT gs_uname.
    APPEND gs_uname TO s_uname .
  ENDLOOP.

  SELECT usr21~bname
       usr21~persnumber
       adrp~name_first
       adrp~name_last
  INTO CORRESPONDING FIELDS OF TABLE it_user
  FROM usr21
  INNER JOIN adrp
  ON usr21~persnumber = adrp~persnumber .
  SORT it_user BY bname .
  LOOP AT it_user .
    CONCATENATE it_user-name_last it_user-name_first INTO it_user-name_text.
    MODIFY it_user.
  ENDLOOP .
ENDFORM.


FORM fvm_getlikp.
  SELECT
      cdhdr~objectclas
      cdhdr~objectid
      cdhdr~changenr
      cdhdr~username
      cdhdr~udate
      cdhdr~utime
      cdhdr~tcode
      cdhdr~planchngnr
      cdhdr~act_chngno
      cdhdr~was_plannd
      cdhdr~change_ind
      cdhdr~langu
      cdhdr~version
      cdpos~tabname
      cdpos~tabkey
      cdpos~fname
      cdpos~chngind
      cdpos~text_case
      cdpos~unit_old
      cdpos~unit_new
      cdpos~cuky_old
      cdpos~cuky_new
      cdpos~value_new
      cdpos~value_old
    INTO CORRESPONDING FIELDS OF TABLE  gt_LIKP
    FROM cdhdr
    INNER JOIN cdpos   ON cdpos~objectclas = cdhdr~objectclas
    AND cdpos~objectid = cdhdr~objectid
    AND cdpos~changenr = cdhdr~changenr
    WHERE cdhdr~objectid IN s_vbeln1
          AND cdhdr~udate IN s_datum1
      AND cdhdr~objectclas = 'LIEFERUNG'  "交货单
      AND cdhdr~langu = sy-langu
      AND cdpos~fname IN ('CMNGV','LFIMG','KUNNR','WADAT_IST','LGORT','WBSTK','SPE_WAUHR_IST','AMTBL','CMGST').
  SORT gt_cdhp BY objectid  tabkey udate utime.


* SELECT
*        VKBUR_ANA ,"销售办事处
*        VKGRP_ANA  ,
*          VBELN ,  "销售凭证
*          POSNR  ,  "凭证项目
*         MATNR ,  "物料编号
*          ARKTX ,   "物料描述
*       NETWR   ,       "订单未税金额
*        WAERK  ,       "币别
*        KUNNR_ANA
*
*   INTO TABLE @DATA(LT_ZVBAP1)
*   FROM VBAP
**   INNER JOIN TVGRT on TVGRT~VKGRP = vbap~VKGRP_ANA
*   WHERE
*    VBAP~VBELN in @s_vbeln1.
*
*   sort LT_ZVBAP1 by VBELN POSNR.
SELECT
  VBELN,
   KUNNR
  INTO TABLE @DATA(LT_LIKP)
   FROM LIKP
  WHERE
    LIKP~VBELN in @S_VBELN1.



 SELECT KUNNR , NAME1
      INTO TABLE @DATA(LT_ZKNA1)
      FROM KNA1
  FOR ALL ENTRIES IN @LT_LIKP
     WHERE
  KNA1~KUNNR = @LT_LIKP-KUNNR .

SORT LT_ZKNA1 by kunnr.


   SELECT
     VBELN ,
     POSNR,
     matnr,
     ARKTX ,
     LFIMG
   INTO TABLE @DATA(LT_LIPS)
     FROM LIPS
     WHERE
    LIPS~VBELN in @s_vbeln1.


  sort LT_LIPS by VBELN POSNR..

    LOOP AT gt_LIKP .
    MOVE-CORRESPONDING gt_LIKP TO it_show.
    READ TABLE it_user1 WITH KEY bname = gt_LIKP-username BINARY SEARCH.
    IF sy-subrc = 0.
      it_show-name_text = it_user1-name_text.
    ENDIF.

    IF it_show-name_text NOT IN s_uname1[]  AND  gt_LIKP-username NOT IN s_uname1[].
      CLEAR gt_LIKP.
      CONTINUE.
    ENDIF.
    CASE gt_LIKP-fname.
      WHEN  'CMNGV' .
        it_show-fname =  '计划交货日期'.
      WHEN  'WADAT_IST' .
        it_show-fname =  '实际发货日期'.
      WHEN  'LFIMG' .
        it_show-fname =  '交货数量'.
      WHEN  'KUNNR' .
        IF gt_LIKP-tabname = 'VBAK'.
          it_show-fname =  '售达方'.
        ELSEIF gt_LIKP-tabname = 'VBPA'..
          it_show-fname =  '送达方'.
        ENDIF.
      WHEN  'LGORT' .
        it_show-fname =  '库存地点'.
      WHEN  'WBSTK' .
        it_show-fname =  '货物移动状态'.
      WHEN  'SPE_WAUHR_IST' .
        it_show-fname =  '发货时间'.
      WHEN  'AMTBL' .
        it_show-fname =  '已批准凭证信贷值'.
      WHEN  'CMGST' .
        it_show-fname =  '信用检查的总体状态'.
      WHEN OTHERS.
        it_show-fname = ''.
    ENDCASE.
    IF it_show-fname = ''.
      CONTINUE.
    ENDIF.

    it_show-posnr =  it_show-tabkey+13(6).
    it_show-etenr = it_show-tabkey+19(4).
    APPEND it_show.
    CLEAR:gt_likp, it_show .
  ENDLOOP.

  LOOP at it_show.
     READ TABLE LT_LIPS INTO DATA(LS_LIPS) WITH KEY VBELN = it_show-objectid
                                                    POSNR = it_show-POSNR .
    IF sy-subrc = 0.
      it_show-MATNR = LS_LIPS-MATNR.
      it_show-MAKTX = LS_LIPS-ARKTX.
      it_show-LFIMG = LS_LIPS-LFIMG.

    ENDIF.
  READ TABLE LT_LIKP INTO DATA(LS_LIKP) WITH KEY VBELN = it_show-objectid.
IF sy-subrc = 0.
      it_show-KUNNR = LS_LIKP-KUNNR.

    ENDIF.
   MODIFY it_show.
  READ TABLE LT_ZKNA1 INTO DATA(LS_ZKNA1) WITH KEY KUNNR = it_show-KUNNR.

 IF sy-subrc = 0.
      it_show-NAME1 = LS_ZKNA1-NAME1.

    ENDIF.
   MODIFY it_show.

ENDLOOP.
ENDFORM.



FORM fvm_uname1 .
  DATA gc_string1 TYPE string .
  RANGES: gs_uname1 FOR it_show-name_text.
  LOOP AT s_uname1 . "大小写
    gc_string1  = s_uname1-low .
    TRANSLATE gc_string1 TO UPPER CASE  .
    IF gc_string1 <> s_uname1-low .
      gs_uname1-sign = 'I'.
      gs_uname1-option = 'EQ'.
      gs_uname1-low = gc_string1. "大写的
      APPEND gs_uname1 .
    ENDIF.
  ENDLOOP.
  LOOP AT gs_uname1.
    APPEND gs_uname1 TO s_uname1 .
  ENDLOOP.

  SELECT usr21~bname
       usr21~persnumber
       adrp~name_first
       adrp~name_last
  INTO CORRESPONDING FIELDS OF TABLE it_user1
  FROM usr21
  INNER JOIN adrp
  ON usr21~persnumber = adrp~persnumber .
  SORT it_user1 BY bname .
  LOOP AT it_user1 .
    CONCATENATE it_user1-name_last it_user1-name_first INTO it_user1-name_text.
    MODIFY it_user1.
  ENDLOOP .
ENDFORM.


FORM fvm_alv1 .

  gs_layout-no_toolbar = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.
  gs_layout-box_fname = 'BOX'.
  REFRESH gt_fcat_lvc .
  set_fieldcat:
                   'KUNNR'   '' '送达方'    '' 'X' '' '',
                  'NAME1'   '' '送达方名称'    '' 'X' '' '',
                  'OBJECTID'   '' '交货单'    '' 'X' '' '',
                'POSNR'      '' '项目'   '' 'X' '' '',
                'LFIMG'      '' '交货数量'   '' 'X' '' '',
                'MATNR'      '' '物料'   '' 'X' '' '',
                'MAKTX'      '' '物料描述'   '' 'X' '' '',
                'USERNAME'   '' '用户'   '' 'X' '' '',
                'NAME_TEXT'  '' '用户名'   '' 'X' '' '',
                'UDATE'      '' '日期'    '' 'X' '' '',
                'UTIME'      '' '时间'   '' 'X' '' '',
                'TCODE'      '' '事务码' '' 'X' '' '',
                'TABNAME'    '' '表名'    '' 'X' '' '',
                'FNAME'      '' '字段名'  '' 'X' '' '',
*                'CHNGIND'    '' '更改标志' '' 'X' '' '',
                'VALUE_NEW'  '' '新值' '' 'X' '' '',
                'VALUE_OLD' '' '旧值'  '' 'X' '' '' .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
*     i_callback_pf_status_set = 'FRM_PF_STATUS'
*     i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc      = gs_layout
      it_fieldcat_lvc    = gt_fcat_lvc
      i_save             = 'A'
    TABLES
      t_outtab           = it_show
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.




ENDFORM.

更多SAP文章请点击
更多SAP文章更新,大家一起学习进步!

请添加图片描述

文章中如有错误处。敬请指正!

搜索公众号:SAP资料文库
微信号:SPRO_PP

写于:深圳福田

时间:2024-04-24

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

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

相关文章

“豪门”子刊!中科院2区SCI,收稿范围广,发文量超20000!无预警记录,极速录用见刊!

&#xff08;一&#xff09;期刊简介概况 【期刊类型】网络数据类SCIE 【出版社】SPRINGER出版社 【期刊概况】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院2区 【版面类型】正刊&#xff0c;仅10篇版面 【预警情况】2020-2024年无预警记录 【收录年份】2…

【项目】基于JDBC+MySQL的Java教务管理系统(附源码+论文说明)

摘要 随着信息技术的不断发展&#xff0c;教育管理也在向数字化、智能化方向迈进。Java作为一种广泛应用于企业级应用开发的编程语言&#xff0c;与数据库技术的结合更是为教务管理系统的开发提供了强大的支持。 本文将介绍基于JDBC&#xff08;Java Database Connectivity&a…

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里&#xff0c;每一位开发工程师都如同一位探险家&#xff0c;不断地探索、挑战和成长。作为一名新入职的Java开发工程师&#xff0c;我面临着全新的技术栈和业务领域&#xff0c;这是一次跨越未知的征程&#xff0c;也是一次自我提升的机会。 新入职 初入公司…

mac系统镜像源管理之nrm的安装与使用

之前有介绍过&#xff1a;pnpm安装和使用&#xff0c;nvm安装及使用&#xff0c;在前端开发中其实还有一个工具也会偶尔用到&#xff0c;那就是nrm&#xff0c;本文就详解介绍一下这个工具&#xff0c;非常的简单且好用&#xff5e; 文章目录 1、什么是nrm&#xff1f;2、安装3…

为什么说这些倒腾AI的方式会把自己“搞死”

在AI技术的浪潮下&#xff0c;许多基于大模型的产品涌现而出&#xff0c;但并非所有创新都能带来成功&#xff0c;有时大模型的出现还会放大AI创业公司的内部矛盾。这个时候&#xff0c;我们需要搭建与AI相配的底层思考框架。 为什么说这些倒腾AI的方式会把自己“搞死”© …

go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端 前言 从这篇文章开始我们就正式进入了日志收集系统的编写&#xff0c;后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧&#xff01; 需要实现的功能 我们要收集指定目录下的日志文件&#xff0c;将它们发…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

Ubuntu镜像下载与安装2024.4版本(超适合新手)

前言&#xff1a; 在VMware中安装Ubuntu镜像&#xff0c;首先需要去下载镜像&#xff0c;但是由于服务器在国外&#xff0c;下载速度相对较慢&#xff0c;国内也有镜像&#xff0c;较推荐在国内镜像站下载&#xff0c;例如阿里镜像和清华镜像。 官网&#xff1a;Ubuntu系统下…

LLM 为什么需要 tokenizer?

文章目录 1. LLM 预训练目的1.1 什么是语言模型 2. Tokenizer一般处理流程&#xff08;了解&#xff09;3. 进行 Tokenizer 的原因3.1 one-hot 的问题3.2 词嵌入 1. LLM 预训练目的 我们必须知道一个预训练目的&#xff1a;LLM 的预训练是为了建立语言模型。 1.1 什么是语言模…

月入8k,21岁计算机专业男孩转行网优,天赋可以让人发光,努力也能!

今天的主人公是一位仅21岁的年轻小帅哥&#xff0c;大学学的是计算机专业&#xff0c;毕业后的工作是卖苦力&#xff0c;工作一段时间后毅然决然的选择了转行后台网优&#xff0c;让我们一起来看看这位21岁男孩转行背后的故事... 卖苦力&#xff0c;是没有前途的 今天的主人公…

(一)JVM实战——jvm的组成部分详解

前言 本节内容是关于java虚拟机JVM组成部分的介绍&#xff0c;通过其组成架构图了解JVM的主要组成部分。 正文 ClassFile&#xff1a;字节码文件 - javac&#xff1a;javac前端编译器将源代码编译成符合jvm规范的.class文件&#xff0c;即字节码文件 - class文件的结构组成&a…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 &#xff0c;默认它会找叫做banner的文件&#xff0c;各种格式…

[GXYCTF2019]BabyUpload-BUUTF

题&#xff1a; 步骤&#xff08;先上传木马&#xff0c;在上传.htaccess&#xff09; 准备工作 他过滤了<? ,ph等 准备&#xff1a;一句话木马&#xff0c;.htaccess文件 .htaccess SetHandler application/x-httpd-php //解析为php文件 muma1.jpg<script languag…

刚买的云服务器(阿里云) 玩玩Linux指令 rm -rf /*

rm -rf /* 在Linux中&#xff0c;rm代表的是删除&#xff0c;选项-rf代表的是没有提示信息的递归删除文件夹&#xff0c;/‘代表的是Linux中的根目录。’ * 代表的是所有文件夹&#xff0c;所以该指令的功能就是删除根目录下的所有文件&#xff0c;一会儿肯定服务器崩溃&#x…

使用pytorch构建GAN模型的评估

本文为此系列的第六篇对GAN的评估&#xff0c;上一篇为Controllable GAN。文中使用训练好的分类模型的部分网络提取特征将真实分布与生成分布进行对比来评估模型的好坏&#xff0c;若有不懂的无监督知识点可以看本系列第一篇。 原理 1.评估模型的指标 一般来说&#xff0c;我们…

多级嵌套对象数组:根据最里层id找出它所属的每层父级,适用于树形数据格式

文章目录 需求分析 需求 已知一个树形格式数据如下&#xff1a; // 示例数据 const data [{"id": "1","parentId": null,"children": [{"id": "1.1","parentId": "1","children"…

粒子群算法与优化储能策略python实践

粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;, 是1995年J. Kennedy博士和R. C. Eberhart博士一起提出的&#xff0c;它是源于对鸟群捕食行为的研究。粒子群优化算法的基本核心是利用群体中的个体对信息的共享从而使得整个群体的运动…

Wireshark数据包分析入门

Wireshark数据包分析 1. 网络协议基础1.1. 应传网数物&#xff08;应表会传网数物&#xff09; 2. 三次握手2.1. 第一次握手2.2. 第二次握手2.3. 第三次握手2.4. 三次握手后流量特征 3. 第一层---物理层&#xff08;以太网&#xff09;4. 第二层---数据链路层&#xff08;PPP L…

139GB,台北倾斜摄影OSGB数据V0.1版

本月初发布了谷歌倾斜摄影数据OSGB转换工具V0.2版(更新&#xff01;谷歌倾斜摄影转换生成OSGB瓦片V0.2版),并免费分享了基于V0.2版转换工具生产的澳门地区OSGB数据(首发&#xff01;澳门地区OSGB数据V0.2版免费分享),V0.2版本在生产速度、显示效率和OSGB数据轻量化方面进行了优…

软考:高级系统架构师案例必备概念

根据2013年-2023年真题整理 必背案例概念 软件架构风格 软件架构风格是指描述特定软件系统组织方式的惯用模式。 组织方式描述了系统的组成构件和这些构件的组织方式。 惯用模式则反映众多系统共有的结构和语义。 架构风险 架构风险是指架构设计中潜在的、存在问题的架构…