SAP ABAP批次增强

  需要先等业务顾问配置之后,才生效。这里是按照移动类型类配置是否生成批次,这里以T156-CHNEU区分是否需要批次。

注意:如果使用T156-CHNEU来判断移动类型是否需要批次,需要业务顾问在IMG->后勤->批次管理->新批次的建立->定义物料移动的批次建立,对相应的移动类型进行设置,然后T156-CHNEU才会发生相应的变化

 

设定界面如下:

 

 

 

一、MIGO过账BADI中,IF_EX_MB_MIGO_BADI~LINE_MODIFY

DATA:nextnum   TYPE i,
       lv_numadd TYPE numc4.
  DATA: lv_xcharg TYPE mcha-charg.
  DATA i_item LIKE TABLE OF cs_goitem.
  DATA w_item LIKE cs_goitem.
**自动填批次
*  BREAK it0003.
*  CASE cs_goitem-bwart.
*    WHEN '101' OR '202' OR '501' OR '511' OR '561' OR '301'.
  SELECT SINGLE chneu
    INTO @DATA(lv_chneu)
    FROM t156
   WHERE bwart EQ @cs_goitem-bwart.
  CASE lv_chneu.
    WHEN 'A' OR 'B' OR 'C' OR 'D' OR 'E' OR 'F'.
      IF cs_goitem-charg EQ space ."AND cs_goitem-mblnr NE ''.
        IMPORT t1 TO i_item FROM MEMORY ID 'ITM'.
        SELECT SINGLE xchpf
          INTO @DATA(lv_xchpf)
          FROM mara
         WHERE matnr EQ @cs_goitem-matnr.
        IF sy-subrc EQ 0.
          IF lv_xchpf EQ 'X'.
            SELECT charg
                INTO @lv_xcharg UP TO 1 ROWS
                FROM mch1
                WHERE
                      ersda EQ @sy-datum AND
                      matnr EQ @cs_goitem-matnr
*                    AND werks EQ @x_bncom-werks
                ORDER BY charg DESCENDING.
            ENDSELECT.

            IF lv_xcharg NE ''.
              lv_numadd = lv_xcharg+6(4) + 1.
            ELSE.
              lv_numadd = 1.
            ENDIF.
            cs_goitem-charg = |{ sy-datum+2(6) }{ lv_numadd ALPHA = IN }|.
          ENDIF.
        ENDIF.
        READ TABLE i_item INTO DATA(ls_item2) WITH KEY zeile = cs_goitem-zeile"
                                                       matnr = cs_goitem-matnr.
        IF sy-subrc NE 0.
          SORT i_item BY matnr charg DESCENDING.
          LOOP AT i_item INTO w_item WHERE matnr = cs_goitem-matnr
                                       AND charg NE space.
            IF lv_xcharg LT w_item-charg.
              cs_goitem-charg = w_item-charg + 1.
            ENDIF.
            EXIT.
          ENDLOOP.

          APPEND cs_goitem TO i_item.

          EXPORT t1 FROM i_item TO MEMORY ID 'ITM'.
        ENDIF.
*        CLEAR cs_goitem-charg.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
*        WHEN OTHERS.
*        ENDCASE.
*    ENDIF.
View Code

二、原本按照配置是在出口 SE38-> ZXVBZU02 中,但不知为什么,始终不进入该出口位置。

下面四个出口是原本按照配置该进入的。

ZXVBZU01
ZXVBZU02
ZXVBZU03
ZXVBZU04

回到出口调用处SE37->VB_NEXT_BATCH_NUMBER

  

* 内部批次号增强 TYH
*  break it0003.
  DATA: i_item LIKE TABLE OF GOITEM,
        LS_ITEM LIKE GOITEM.
  DATA:nextnum   TYPE i,
       lv_numadd TYPE numc4.
  DATA: lv_xcharg TYPE mcha-charg.
*  CASE x_bncom-bwart.
*    WHEN '101' OR '202' OR '501' OR '511' OR '561' OR '301'.
  SELECT SINGLE chneu
    INTO @DATA(lv_chneu)
    FROM t156
   WHERE bwart EQ @x_bncom-bwart.
  CASE lv_chneu.
    WHEN 'A' OR 'B' OR 'C' OR 'D' OR 'E' OR 'F'.
      IF new_charg+0(6) ne sy-datum+2(6).
        IMPORT t1 TO i_item FROM MEMORY ID 'ITM'.
          SELECT charg
            INTO @lv_xcharg UP TO 1 ROWS
            FROM mch1
            WHERE
                  ersda EQ @sy-datum AND
                  matnr EQ @x_bncom-matnr
*              AND werks EQ @x_bncom-werks
            ORDER BY charg DESCENDING.
          ENDSELECT.
          IF lv_xcharg NE ''.
            lv_numadd = lv_xcharg+6(4) + 1.
          ELSE.
            lv_numadd = 1.
          ENDIF.

          new_charg = |{ sy-datum+2(6) }{ lv_numadd ALPHA = IN }|.
          allow_existing_batch = 0.
          SORT i_item BY matnr zeile charg DESCENDING.

          LOOP AT i_item INTO LS_ITEM WHERE matnr = x_bncom-matnr
                                       AND charg NE space.
*            IF new_charg LT LS_ITEM-charg.
*              new_charg = LS_ITEM-charg + 1.
*            ENDIF.
            new_charg = LS_ITEM-charg.
            delete i_item[].
            EXIT.
          ENDLOOP.
          MOVE-CORRESPONDING X_BNCOM TO LS_ITEM.
          LS_ITEM-CHARG = new_charg.
          APPEND x_bncom TO i_item.
          EXPORT t1 FROM i_item TO MEMORY ID 'ITM'.
        ENDIF.
    WHEN OTHERS.
  ENDCASE.
*  WHEN OTHERS.
*  ENDCASE.
View Code

 

posted @ 2022-06-01 08:43  蛀牙首领  阅读(647)  评论(0编辑  收藏  举报