sap获取批次特性报表

是一个非常easy的小报表。

一开始用的是这样的取数逻辑,我觉得还是很不错的

java 复制代码
 "获取物料批次对应的类等相关信息
    CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
      EXPORTING
        i_matnr = itab-matnr
        i_charg = itab-charg
      IMPORTING
        e_objek = e_objek
        e_obtab = e_obtab
        e_klart = e_klart
        e_class = e_class.
    "依据上一个函数的反馈返回值获取特性以及特性值

    CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
      EXPORTING
        objectkey       = e_objek
        objecttable     = e_obtab
        classnum        = e_class
        classtype       = e_klart
        keydate         = sy-datum
*       UNVALUATED_CHARS       = ' '
        language        = sy-langu
*     IMPORTING
*       STATUS          = STATUS
*       STANDARDCLASS   = STANDARDCLASS
      TABLES
        allocvaluesnum  = lt_allocvaluesnum
        allocvalueschar = lt_allocvalueschar
        allocvaluescurr = lt_allocvaluescurr
        return          = lt_return.
    READ TABLE lt_allocvalueschar ASSIGNING FIELD-SYMBOL(<fs_atwrt>) WITH KEY charact = 'ZBUYMATNR'.
    IF sy-subrc = 0.
      itab-zbuynatnr = <fs_atwrt>-value_neutral.
    ENDIF.

但是说效率有点低,就改成从ausp表数据了,完整代码po 到最后

java 复制代码
  DATA:gv_atnam TYPE atnam  VALUE 'Z_OLD_BATCH',  " 要查询的特性名称
*  gv_mandt TYPE mandt VALUE '800',    " 客户端
       gs_cabn  TYPE cabn.

  DATA: z_old_batch TYPE char10.

* 精准查询ATNAM对应的ATINN
  SELECT SINGLE atinn INTO gs_cabn-atinn
    FROM cabn
   WHERE
*   mandt = gv_mandt
  atnam = gv_atnam.

  z_old_batch = gs_cabn-atinn.

  SELECT  a~matnr a~charg a~cuobj_bm b~atwrt
  INTO TABLE gt_itab1
  FROM mch1 AS a INNER JOIN ausp AS b ON a~cuobj_bm = b~objek
  FOR ALL ENTRIES IN gt_itab
  WHERE a~matnr = gt_itab-matnr
  AND a~charg = gt_itab-charg
  AND  b~atinn = z_old_batch
  AND a~cuobj_bm <> 0.

*其实可以直接填批次特性对应的atinn值的,但是避免各系统之间atinn不同的情况,改成从表里获取

然后就是一些小坑啥的

比如要复制gui状态,不然运行完程序后点击返回键会报错

用二分法read table的之前要进行排序,不然会出现有数据但找不到的情况

以及赋值完之后记得modify gt_itab.

大概就是这些,总的来说是一个非常简单的小程序了

完整代码:

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZMMR137
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr137.
TABLES: mchb,makt,ausp,mch1,mara,t006a,mkpf,ekbe,mseg.
INCLUDE zpub_lvc_func."包含功能模块
* 定义类型池
TYPE-POOLS: vrm.
TYPE-POOLS: slis.
*定义内表
DATA: BEGIN OF gt_itab OCCURS 0,
        matnr     LIKE mch1-matnr,          " 物料编号,从mseg表中获取
        charg     LIKE mch1-charg,
        ersda     LIKE mch1-ersda, "创建日期
        ernam     LIKE mch1-ernam,
        hsdat     LIKE mch1-hsdat,
        vfdat     LIKE mch1-vfdat,
        lwedt     LIKE mch1-lwedt,
        zwrt1     LIKE ausp-atwrt, "原有批次(属性批次)
      END OF gt_itab.
"获取物料批次对应的类等相关信息
DATA e_objek TYPE cuobn.
DATA e_obtab TYPE tabelle.
DATA e_klart TYPE klassenart.
DATA e_class TYPE klasse_d.
"获取特性以及特性值
DATA lt_allocvaluesnum   TYPE STANDARD TABLE OF bapi1003_alloc_values_num.
DATA ls_allocvaluesnum   TYPE bapi1003_alloc_values_num.
DATA lt_allocvalueschar  TYPE STANDARD TABLE OF bapi1003_alloc_values_char.
DATA ls_allocvalueschar  TYPE bapi1003_alloc_values_char.
DATA lt_allocvaluescurr  TYPE STANDARD TABLE OF bapi1003_alloc_values_curr.
DATA ls_allocvaluescurr  TYPE bapi1003_alloc_values_curr.
DATA lt_return           TYPE STANDARD TABLE OF bapiret2.
DATA ls_return           TYPE bapiret2.

DATA: BEGIN OF gt_itab1 OCCURS 0,
        matnr    LIKE mchb-matnr,
        charg    LIKE mchb-charg,
        cuobj_bm LIKE mch1-cuobj_bm,
        atwrt    LIKE ausp-atwrt,
      END OF gt_itab1.

DATA: BEGIN OF gt_itab2 OCCURS 0,
        matnr    LIKE mchb-matnr,
        charg    LIKE mchb-charg,
        cuobj_bm LIKE mch1-cuobj_bm,
        atwrt    LIKE ausp-atwrt,
      END OF gt_itab2.

SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
s_matnr FOR mch1-matnr,
s_charg FOR mch1-charg,
s_ersda FOR mch1-ersda.
SELECTION-SCREEN END OF BLOCK blk1.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM alv_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*    获取目标数据表的数据
*----------------------------------------------------------------------*
FORM get_data.
  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE gt_itab
  FROM mch1
 WHERE matnr IN s_matnr
   AND charg IN s_charg
  AND ersda IN s_ersda.



*  LOOP AT gt_itab.
*    CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
*      EXPORTING
*        i_matnr = gt_itab-matnr
*        i_charg = gt_itab-charg
*      IMPORTING
*        e_objek = e_objek
*        e_obtab = e_obtab
*        e_klart = e_klart
*        e_class = e_class.
*
*    CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
*      EXPORTING
*        objectkey       = e_objek
*        objecttable     = e_obtab
*        classnum        = e_class
*        classtype       = e_klart
*        keydate         = sy-datum
**       UNVALUATED_CHARS       = ' '
*        language        = sy-langu
**     IMPORTING
**       STATUS          = STATUS
**       STANDARDCLASS   = STANDARDCLASS
*      TABLES
*        allocvaluesnum  = lt_allocvaluesnum
*        allocvalueschar = lt_allocvalueschar
*        allocvaluescurr = lt_allocvaluescurr
*        return          = lt_return.
*    READ TABLE lt_allocvalueschar ASSIGNING FIELD-SYMBOL(<fs_atwrt>) WITH KEY charact = 'ZBUYMATNR'.
*    IF sy-subrc = 0.
*      gt_itab-zbuynatnr = <fs_atwrt>-value_neutral.
*    ENDIF.
*    READ TABLE lt_allocvalueschar ASSIGNING <fs_atwrt> WITH KEY charact = 'Z_OLD_BATCH'.
*    IF sy-subrc = 0.
*      gt_itab-zwrt1 = <fs_atwrt>-value_neutral.
*    ENDIF.
*    modify gt_itab.
*  ENDLOOP.
*新系统修改ATINN
  DATA:gv_atnam TYPE atnam  VALUE 'Z_OLD_BATCH',  " 要查询的特性名称
*  gv_mandt TYPE mandt VALUE '800',    " 客户端
       gs_cabn  TYPE cabn.

  DATA: z_old_batch TYPE char10.

* 精准查询ATNAM对应的ATINN
  SELECT SINGLE atinn INTO gs_cabn-atinn
    FROM cabn
   WHERE
*   mandt = gv_mandt
  atnam = gv_atnam.

  z_old_batch = gs_cabn-atinn.
*新系统修改ATINN

*新系统修改ATINN
  DATA:gv_atnam1 TYPE atnam  VALUE 'ZBUYMATNR',  " 要查询的特性名称
*  gv_mandt TYPE mandt VALUE '800',    " 客户端
       gs_cabn1  TYPE cabn.

  DATA: zbuymatnr TYPE char10.

* 精准查询ATNAM对应的ATINN
  SELECT SINGLE atinn INTO gs_cabn1-atinn
    FROM cabn
   WHERE
*   mandt = gv_mandt
  atnam = gv_atnam1.

  zbuymatnr = gs_cabn1-atinn.
*新系统修改ATINN

  SELECT  a~matnr a~charg a~cuobj_bm b~atwrt
  INTO TABLE gt_itab1
  FROM mch1 AS a INNER JOIN ausp AS b ON a~cuobj_bm = b~objek
  FOR ALL ENTRIES IN gt_itab
  WHERE a~matnr = gt_itab-matnr
  AND a~charg = gt_itab-charg
  AND  b~atinn = z_old_batch
  AND a~cuobj_bm <> 0.

  SELECT  a~matnr a~charg a~cuobj_bm b~atwrt
  INTO TABLE gt_itab2
  FROM mch1 AS a INNER JOIN ausp AS b ON a~cuobj_bm = b~objek
  FOR ALL ENTRIES IN gt_itab
  WHERE a~matnr = gt_itab-matnr
  AND a~charg = gt_itab-charg
  AND  b~atinn = zbuymatnr
  AND a~cuobj_bm <> 0.

  SORT gt_itab1 BY matnr charg.
  SORT gt_itab2 BY matnr charg.

  LOOP AT gt_itab.
    READ TABLE gt_itab1 WITH KEY matnr = gt_itab-matnr charg = gt_itab-charg BINARY SEARCH.
    IF sy-subrc = 0.
      gt_itab-zwrt1 = gt_itab1-atwrt.
    ENDIF.
    MODIFY gt_itab.
  ENDLOOP.



ENDFORM.                    "GET_DATA
*&---------------------------------------------------------------------*
*&      Form  ALV_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_data.
  alv_clear_data.
  status = 'X'.        "保存按钮
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'MATNR' '物料号'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'CHARG' '批次号'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'ERSDA' '创建时间'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'ERNAM' '创建人'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'HSDAT' '生产日期'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'VFDAT' '货架到期日'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'LWEDT' '最近收货日期'.
  alv_add_data 'gt_itab' '' '' '' '' '' '' 'ZWRT1' '原有批次'.
  PERFORM get_leng TABLES gt_itab i_fieldcat.  "使ALV长度默认为其本身的字段
  alv_show_data gt_itab.
ENDFORM.                    "ALV_data
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZSAVE'.
ENDFORM.                    "set_pf_status
相关推荐
BigTopOne1 小时前
Long put and Long call
前端
北冥you鱼1 小时前
Go语言常用包使用指南:从标准库到第三方利器
开发语言·microsoft·golang
石像鬼₧魂石1 小时前
【Y2Ksoft】贵阳陈桥饭店ERP管理系统
大数据·前端·物联网·html·数据库架构
俺不中嘞1 小时前
python常用函数
开发语言·python
栋***t1 小时前
从“工具”到“基建”,麦塔在线考试系统经历的时代变局与定位逻辑
java·大数据·数据库·开源软件·无纸化
TheITSea1 小时前
4、React+Tailwind CSS
前端·css·react.js
SelectDB技术团队1 小时前
Agent 可观测性:Apache Doris / SelectDB 的技术能力、选型对比与实践
数据库·人工智能·agent·可观测·ai-native·apache doris·selectdb
木卫二号Coding1 小时前
CentOS 系统 Shell 脚本开机自启动方法详解
linux
csdn2015_1 小时前
kafka如何确保消息不丢失
数据库·分布式·kafka