Z_BOM_REV BOM的反查询

  *&---------------------------------------------------------------------*
*& Report  Z_BOM_REV                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  Z_BOM_REV               LINE-SIZE 200       .

TYPES BEGIN OF ty_mat,
  matnr_s TYPE matnr,
  maktx_s TYPE maktx,
  matnr   TYPE matnr,
  andat   TYPE andat,
  maktx   TYPE maktx,
  vwalt   TYPE stalt,
END OF ty_mat.

TYPES:BEGIN OF ty_matnr,
  matnr   TYPE matnr,
END OF ty_matnr.

DATA ms     TYPE TABLE OF ty_matnr WITH HEADER LINE.
DATA it_mat TYPE TABLE OF ty_mat WITH HEADER LINE.
DATA: itab  TYPE TABLE OF stpov WITH HEADER LINE ,
      equi  TYPE TABLE OF cscequi,
      knd   TYPE TABLE OF cscknd,
      mat   TYPE TABLE OF cscmat,
      std   TYPE TABLE OF cscstd,
      tpl   TYPE TABLE OF csctpl.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE t1.
PARAMETERS:
          p_werks TYPE werks OBLIGATORY,
          p_stlan TYPE stlan OBLIGATORY.

SELECT-OPTIONS s_matnr FOR it_mat-matnr NO INTERVALS ."obligatory.

SELECTION-SCREEN END OF BLOCK bl1 .

INITIALIZATION.

  t1 = '查询'.

AT SELECTION-SCREEN.

  IF s_matnr IS INITIAL.
    MESSAGE '物料号码是必输!' TYPE 'E'.
  ENDIF.

START-OF-SELECTION.
  SELECT matnr FROM marc INTO TABLE ms WHERE matnr IN s_matnr AND werks = p_werks.
  WRITE:/ '   源物料号        ' ,'     源物料描述             ',  '  顶层物料号                ' ,'      顶层物料描述            '' 创建日期            ''可选BOM号'.

  LOOP AT ms.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input  = ms-matnr
      IMPORTING
        output = ms-matnr.
    MODIFY ms.
    PERFORM gettops USING ms-matnr '' '' .
    PERFORM disp.
    WRITE /.
  ENDLOOP.

*&---------------------------------------------------------------------*
*&      Form  gettops
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->MATNR      text
*      -->ANDAT      text
*      -->VWALT      text
*----------------------------------------------------------------------*
FORM gettops USING matnr  andat vwalt.

  DATA intab TYPE TABLE OF  stpov WITH HEADER LINE .
  DATA count TYPE i.

  intab[] = itab[].
  LOCAL itab.
  CALL FUNCTION 'CS_WHERE_USED_MAT'
         EXPORTING
           datub                             = sy-datum
           datuv                             = sy-datum
           matnr                             = matnr
           stlan                             = ''
           werks                             = p_werks
           mclmt                             = '00000000'
           mnstl                             = ''
           mxstl                             = ''
           stltp                             = ''
           newsi                             = ''
         TABLES
           wultb                             = intab
           equicat                           = equi
           kndcat                            = knd
           matcat                            = mat
           stdcat                            = std
           tplcat                            = tpl
        EXCEPTIONS
          call_invalid                      = 1
          material_not_found                = 2
          no_where_used_rec_found           = 3
          no_where_used_rec_selected        = 4
          no_where_used_rec_valid           = 5
          cx_sy_dyn_call_illegal_type       = 6
          OTHERS.

  IF sy-subrc = 0.
    LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
      count count 1.
    ENDLOOP.
*      IF intab-matnr <> matnr.
*        PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
*
*      ENDIF.
*    ENDLOOP.
    IF count 0.
      it_mat-matnr = matnr.
      it_mat-andat = andat.
      it_mat-vwalt = vwalt.
      it_mat-matnr_s = ms-matnr.
      APPEND it_mat.

    ELSE.
      LOOP AT intab WHERE matnr <> matnr AND stlan = p_stlan.
        PERFORM gettops USING intab-matnr intab-andat intab-vwalt .
      ENDLOOP.
    ENDIF.
  ELSE.
    it_mat-matnr = matnr.
    it_mat-andat = andat.
    it_mat-vwalt = vwalt.
    it_mat-matnr_s = ms-matnr.
    APPEND it_mat.

  ENDIF.
ENDFORM.                    "gettops

*&---------------------------------------------------------------------*
*&      Form  DISP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM disp.

*      WRITE:/ matnr ,andat, vwalt.
  SORT it_mat BY matnr andat vwalt.
  DELETE ADJACENT DUPLICATES FROM it_mat.
  LOOP AT it_mat.
    SELECT SINGLE maktx INTO it_mat-maktx
    FROM makt
    WHERE matnr = it_mat-matnr AND spras = '1'.
    SELECT SINGLE maktx INTO it_mat-maktx_s
 FROM makt
 WHERE matnr = it_mat-matnr_s AND spras = '1'.
*  write: / it_mat-matnr under '物料号',it_mat-maktx under '物料描述',IT_MAT-ANDAT UNDER '创建日期' ,IT_MAT-VWALT UNDER '可选BOM号'.
* WRITE:/ '   源物料号        ' ,'     源物料描述             ',  '          顶层物料号        ' ,'      顶层物料描述            ', '            创建日期 ', '可选BOM号'.

    WRITE: / it_mat-matnr_s,it_mat-maktx_s UNDER '     源物料描述             ', it_mat-matnr  UNDER '  顶层物料号                ',it_mat-maktx UNDER '      顶层物料描述            ',it_mat-andat UNDER ' 创建日期            '  ,it_mat-vwalt UNDER
'可选BOM号' .
  ENDLOOP.
  CLEAR it_mat.
  REFRESH it_mat.
ENDFORM.                    "DISP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值