【无标题】SAP-MM物料检验分步过账z

在项目中,QM过账检验完成会一步过账,但实际业务部门需要质检只判定是否合格,仓库进行过账。

第一步ZQM006 质检判定

上图中选择合格,那么默认进入页面的使用决策代码为合格,如下图

如果勾选不合格,默认代码为ZR拒绝。

此处的出现让步接收数量,没有让步金额,金额是按物料金额比例,由财务人员在发票校验时进行扣除,例如小于500按2%扣除,大于500按3%扣除等。

选择行,对合格数量、让步接收数量、返回供应商数量、使用决策代码、仓位进行填写,完成后点击"使用决策”即可完成UD判定。

*&---------------------------------------------------------------------*
*& 程序名  : <ZQM006>                                                  *
*& 标题    : <检验物料过账>                                            *
*& 模块名  : </QM>                                                     *
*& 创建者  : <>                                                  *
*& 创建日期: <2018.06.19>                                               *
*& 程序类型: <表单打印程序>                                             *
*& SAP版本 : ECC 6.0                                                   *
*& 单元ID  : <单元ID>                                                  *
*& 描述    : <>           *
*&---------------------------------------------------------------------*
*& 更改日志                                                            *
*&                                                                     *
*& 日志号      日期     更改者    传输请求号    更改描述                 *
*& ------   ----------  ------  ---------------------------------------*
*& 0000        <>       <更改者>   <传输请求号>    <更改描述>            *
*&                                                               *
*&---------------------------------------------------------------------*
REPORT ZQM006.
************************************TOP
TYPE-POOLS:slis.                   "for alv

DATA:
      it_sortinfo TYPE slis_t_sortinfo_alv   WITH HEADER LINE,  "ALV排序信息
      it_colour   TYPE slis_t_specialcol_alv WITH HEADER LINE,  "ALV列颜色
      it_events   TYPE slis_t_event          WITH HEADER LINE,  "ALV事件
      it_event_exit TYPE slis_t_event_exit   WITH HEADER LINE,
      it_listcomm TYPE slis_t_listheader     WITH HEADER LINE,  "ALV表头
      gt_fieldcat TYPE slis_t_fieldcat_alv ,
      gs_fieldcat LIKE LINE OF gt_fieldcat,
      gs_layout   TYPE slis_layout_alv.                         "ALV layout

* 变量
DATA: g_repid LIKE sy-repid,
      g_tabix TYPE i.

* 表
TABLES:QALS,MAKT,qave,ZQM006,MARA,marc.

*定义主内表
DATA:BEGIN OF GS_ALV  .
      include TYPE ZQM006.
DATA: BOX TYPE C,
      STATUS TYPE C,
      PRNDATE TYPE DATS,         "打印日期
      PRNTIME TYPE TIMS,         "打印时间
      ERNAM  TYPE EKKO-ERNAM,    "采购订单创建者
     END OF GS_ALV .
DATA:GT_ALV LIKE TABLE OF GS_ALV WITH HEADER LINE.

DATA:BEGIN OF GS_LIST  .
      include TYPE ZQM006.
DATA: BOX TYPE C,
      STATUS TYPE C,
      PRNDATE TYPE DATS,         "打印日期
      PRNTIME TYPE TIMS,         "打印时间
      ERNAM  TYPE EKKO-ERNAM,    "采购订单创建者
     END OF GS_LIST .
DATA:GT_LIST LIKE TABLE OF GS_LIST WITH HEADER LINE.

DATA:BEGIN OF LT_MARC OCCURS 0,
       MATNR LIKE MARC-MATNR ,
       WERKS LIKE MARC-WERKS ,
       CGYUAN LIKE MARC-CGYUAN ,
       CWEI  LIKE  MARC-CWEI,

     END OF LT_MARC .
DATA:LS_MARC LIKE LT_MARC .

DATA:LT_ZMM010_PRN TYPE TABLE OF ZMM010_PRN,
     LS_ZMM010_PRN TYPE ZMM010_PRN .

DATA:LT_EKKO TYPE TABLE OF EKKO ,
     LS_EKKO TYPE EKKO .

DATA:GS_QA11 LIKE ZQM006 .


*alv选择屏幕
SELECTION-SCREEN  BEGIN  OF  BLOCK  blk01  WITH  FRAME TITLE text-001.

SELECT-OPTIONS:
                  p_lifnr     FOR qals-lifnr,                  "供应商
                  p_ebeln     FOR qals-ebeln,                  "采购订单
                  p_werk      FOR qals-werk  DEFAULT '1000',   "工厂
                  p_dat       FOR qals-enstehdat ,             "检验批建立日期
                  p_matnr     FOR qals-matnr,                  "物料号
                  p_pru       FOR qals-prueflos.               "检验批号

PARAMETERS: P_TBMAX      TYPE  TBMAXSEL DEFAULT '1000'.         "最大选择条目数
PARAMETERS: p_1   RADIOBUTTON GROUP g1,                        " 合格
            p_2   RADIOBUTTON GROUP g1.                        "不合格

SELECTION-SCREEN  END  OF  BLOCK  blk01.

*事件处理
INITIALIZATION. "初始化

  PERFORM init_data.
*
*AT SELECTION-SCREEN.  "数据验证
*  PERFORM  validata_selection.

*ALV
START-OF-SELECTION.       "开始执行事件
  PERFORM get_data.      "取得数据
*  PERFORM process_data.  "数据处理

END-OF-SELECTION.
  PERFORM output_data.   "数据输出
*&---------------------------------------------------------------------*
*&      Form  INIT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT_DATA .
  g_repid = sy-repid.
  g_tabix = sy-index.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  DATA: BEGIN OF lt_lgort OCCURS 0,
          ebeln type EKPO-EBELN,           "采购订单
          ebelp type EKPO-EBELP,           "行项目
          LGORT type EKPO-LGORT,           "库存地点
        END OF lt_lgort.

      SELECT
         qals~enstehdat        "送检日期
         qals~prueflos         "检验批
         qals~werk             "工厂
         qals~matnr            "物料编码
         qals~KTEXTMAT         "检验对象的短文本
         mara~BISMT            "K3图号
         qals~losmenge         "送检数量
         qals~mengeneinh       "单位
         qals~ebeln            "采购订单
         qals~EBELP            "采购凭证的项目编号
         qals~lifnr            "供应商
         lfa1~NAME1            "名称
         qals~MBLNR            "物料凭证编号
         qals~ZEILE            "物料凭证中的项目
         qals~BUDAT            "凭证中的过帐日期
         qals~BWART            "移动类型(库存管理)
         qals~objnr            "对象号
         qals~LMENGE01         "非限制使用库存
         qals~LMENGE04         "过帐到冻结库存的数量(次品)
         qals~LMENGE07         "返回给供应商的数量
         qals~LMENGEZUB        "必须过帐的数量
         qals~STAT20           "要求的检验计划
         qals~STAT34           "库存记帐完成
         qals~STAT35           "作出使用决策
         qals~LAGORTVORG       "收货仓位
         qals~ERSTELLER        "创建者(MIGO收货产生检验批)
         qals~ERSTELDAT        "创建日期
         qals~ERSTELZEIT       "批量创建时间

         makt~maktx             "物料描述
     UP TO P_TBMAX  ROWS
     INTO CORRESPONDING FIELDS OF TABLE gt_alv
     FROM qals
     INNER JOIN makt  ON qals~matnr = makt~matnr AND SPRAS = '1'
     INNER JOIN mara  ON qals~matnr = mara~matnr
     INNER JOIN LFA1  ON qals~LIFNR = lfa1~LIFNR
                WHERE qals~enstehdat   IN p_dat     "检验批建立日期
                AND  qals~werk         IN p_werk    "工厂
                AND  qals~matnr        IN p_matnr   "物料号
                AND  qals~prueflos     IN p_pru     "检验批号
                AND  qals~lifnr        IN p_lifnr
                AND  qals~ebeln        IN p_ebeln
                AND  qals~stat20 = ''
                AND  qals~stat34 = ''
                AND  qals~stat35 = ''
                AND  qals~LMENGEZUB <> 0   .

*---------------- change by chenwei 200602
     SORT gt_alv BY ebeln ebelp.

    IF gt_alv[] IS NOT INITIAL .
      SELECT ebeln ebelp lgort INTO CORRESPONDING FIELDS OF TABLE lt_lgort
        FROM ekpo FOR ALL ENTRIES IN gt_alv
        WHERE ebeln = gt_alv-ebeln AND ebelp = gt_alv-ebelp.
      SORT lt_lgort by ebeln ebelp.

      LOOP at gt_alv.
        READ TABLE lt_lgort WITH KEY ebeln = gt_alv-ebeln ebelp = gt_alv-ebelp BINARY SEARCH.
        IF  sy-subrc = 0.
          gt_alv-lagortvorg = lt_lgort-lgort .
        ENDIF.
        MODIFY gt_alv.
      endloop.

    endif.
*---------------- 更新检验库存地点到表ZQM006中

    SORT GT_ALV BY prueflos .

 IF GT_ALV[] IS NOT INITIAL .
  SELECT MATNR WERKS CGYUAN CWEI  INTO CORRESPONDING FIELDS OF TABLE LT_MARC FROM MARC
          FOR ALL ENTRIES IN  GT_ALV
         WHERE  MATNR = GT_ALV-MATNR AND WERKS = GT_ALV-WERK .

 SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_ZMM010_PRN FROM ZMM010_PRN
          FOR ALL ENTRIES IN GT_ALV
          WHERE MBLNR = GT_ALV-MBLNR .

SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_EKKO FROM EKKO
         FOR ALL ENTRIES IN GT_ALV
         WHERE EBELN = GT_ALV-EBELN AND LOEKZ = ''.

 ENDIF .

  IF GT_ALV[] IS NOT INITIAL .
     LOOP AT  GT_ALV INTO GS_ALV.
       READ TABLE LT_MARC WITH KEY MATNR = GS_ALV-MATNR WERKS = GS_ALV-WERK .
       IF  SY-SUBRC = 0.
          GS_ALV-CGYUAN = LT_MARC-CGYUAN .
          GS_ALV-CWEI   = LT_MARC-CWEI  .
       ENDIF.

   IF LT_ZMM010_PRN IS NOT INITIAL .
     READ TABLE LT_ZMM010_PRN INTO LS_ZMM010_PRN WITH KEY MBLNR = GS_ALV-MBLNR .
     IF SY-SUBRC = 0.
       GS_ALV-PRNDATE = LS_ZMM010_PRN-PRNDATE .
       GS_ALV-PRNTIME = LS_ZMM010_PRN-PRNTIME .

     ENDIF.

   ENDIF.

   IF  LT_EKKO IS NOT INITIAL .
      READ TABLE LT_EKKO INTO LS_EKKO WITH KEY EBELN = GS_ALV-EBELN .
      IF SY-SUBRC = 0.
         GS_ALV-ERNAM = LS_EKKO-ERNAM .
      ENDIF.
   ENDIF.

       MODIFY GT_ALV FROM  GS_ALV TRANSPORTING CGYUAN CWEI PRNDATE PRNTIME ERNAM .
     ENDLOOP.
   ENDIF .




   CHECK GT_ALV[] IS NOT INITIAL .

   IF P_1 = 'X' .
     LOOP AT GT_ALV INTO GS_ALV .
      IF GS_ALV-WERK = '1000' OR  GS_ALV-WERK = 'H020' .
       GS_ALV-LMENGE01  = GS_ALV-losmenge .
       GS_ALV-VCODE     = 'ZA1' .
       GS_ALV-VCODEGRP  = '01' .
       GS_ALV-QKENNZAHL = '100' .
       ELSE .
       GS_ALV-LMENGE01  = GS_ALV-losmenge .
       GS_ALV-VCODE     = 'A' .
       GS_ALV-VCODEGRP  = '01' .
       GS_ALV-QKENNZAHL = '100' .
       ENDIF .
       MODIFY GT_ALV FROM GS_ALV TRANSPORTING LMENGE01 VCODE VCODEGRP QKENNZAHL .
     ENDLOOP .
   ELSE .
     LOOP AT GT_ALV INTO GS_ALV .
      IF GS_ALV-WERK = '1000'  OR  GS_ALV-WERK = 'H020' .
       GS_ALV-LMENGE07 = GS_ALV-losmenge .
       GS_ALV-VCODE     = 'ZR' .
       GS_ALV-VCODEGRP  = '01' .
       GS_ALV-QKENNZAHL = '1' .
      ELSE .
       GS_ALV-LMENGE07 = GS_ALV-losmenge .
       GS_ALV-VCODE     = 'R' .
       GS_ALV-VCODEGRP  = '01' .
       GS_ALV-QKENNZAHL = '1' .
      ENDIF .
       MODIFY GT_ALV FROM GS_ALV TRANSPORTING LMENGE07 VCODE VCODEGRP QKENNZAHL .
     ENDLOOP .

   ENDIF .

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  OUTPUT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OUTPUT_DATA .
    PERFORM build_events. "创建事件集
    PERFORM build_event_exit.

  gs_layout-zebra = 'X'.
*  gs_layout-colwidth_optimize = 'X'.
  PERFORM fieldcat_int USING :
     'BOX'          '选择'         '' '',
     'ENSTEHDAT'    '送检日期'     ''  '',
     'ERSTELZEIT'   '创建时间'     ''  '' ,
     'PRUEFLOS'     '检验批'       ''  '',
     'WERK'         '工厂'         ''  '',
     'MATNR'        '物料编码'     'MATNR'  'MARA',
     'KTEXTMAT'     '检验对象的短文本' ''  '' ,
*     'MAKTX'        '物料描述'     ''  '',
     'BISMT'        'K3图号'      '' '' ,
     'LOSMENGE'     '送检数量'     ''  '',
     'LMENGE01'     '合格数量'      ''  '' ,
     'LMENGE04'     '让步接收的数量'   ''  '' ,
     'LMENGE07'     '返回给供应商的数量'    ''  '',
     'VCODE'        '使用决策代码'  ''  '',
*     'GRUND'        '移动原因'            ''  '' ,
     'LAGORTVORG'   '收货仓位'     ''  '' ,
     'MENGENEINH'   '单位'         ''  '',
     'EBELN'        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP龙哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值