WM 下架

*&---------------------------------------------------------------------*
*& 包含               ZWMXCE022_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE EXIT_COMMAND_0100 INPUT.
  CASE OK_CODE_100.
*   退出 & F3 返回
    WHEN '&F03' OR '&F15' OR '&F12' OR 'ZBUT_F3'.
      CLEAR: ZXCWMS015-LENUM.
      LEAVE TO TRANSACTION 'LM01'.

    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  CASE OK_CODE_100.
*   F1 保存
    WHEN 'ZBUT_F1'.
      PERFORM FRM_CHECK_DATA.
      "PERFORM FRM_CREATE_MOV.

      DATA LS_LQUA TYPE TS_LQUA.

      PERFORM FRM_CREATE_TO USING LS_LQUA.
      "PERFORM FRM_CONFIRM_TO.
      "PERFORM FRM_CREATE_TO_999 ."USING uv_bwart
*   F2 清除
    WHEN 'ZBUT_F2'.
      CLEAR: ZXCWMS015-LENUM.

    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATA .
  DATA:    LV_MESSAGE TYPE STRING.


ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CREATE_MOV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CREATE_MOV .

ENDFORM.

FORM FRM_CREATE_TO USING US_LQUA TYPE TS_LQUA.

  DATA: LS_LQUA     TYPE TS_LQUA,
        LS_LQUA_999 TYPE TS_LQUA,
        LV_LGNUM    TYPE LEIN-LGNUM,
        LV_TANUM    TYPE LTAK-TANUM,
        LV_LGBER    TYPE LAGP-LGBER,
        LV_LETYP    TYPE LEIN-LETYP,
        LV_MESSAGE  TYPE STRING.

  CLEAR LS_LQUA.
  READ TABLE GT_LQUA INTO LS_LQUA INDEX 1.

  TYPESBEGIN OF TY_LHMNG,
           LETYP TYPE LVS_LETYP1,
           LHMNG TYPE LVS_LHMNG1,
         END OF TY_LHMNG.
  DATA:
    LT_SPLIT_TABLE TYPE TABLE OF STRING,
    LT_RETURN      TYPE TABLE OF BAPIRET2,
    LS_RETURN      TYPE          BAPIRET2,
    LT_LHMNG       TYPE TABLE OF TY_LHMNG,
    LS_LHMNG       TYPE TY_LHMNG,
    LV_NLENR(11)   TYPE C.

  DATA"LV_LGNUM     TYPE LTAK-LGNUM,
    LV_TBNUM     TYPE LTAK-TBNUM,
    "LV_TANUM     TYPE LTAK-TANUM,
    LT_TRITE     TYPE TABLE OF L03B_TRITE,
    LS_TRITE     TYPE L03B_TRITE,
    LS_ZXCMMT003 TYPE ZXCMMT003.      "将冲销失败的物料凭证记录到表中,由job执行.

  DATA:LT_ZXCWMT005A TYPE STANDARD TABLE OF ZXCWMT005.

  DATA:LS_ZXCWMS005A TYPE ZXCWMT005.

  SELECT *
    INTO TABLE @DATA(LT_LQUA)
    FROM LQUA
    WHERE LENUM = @ZXCWMS015-LENUM.

  READ TABLE LT_LQUA INTO DATA(LS_LQUA1INDEX 1.
  IF SY-SUBRC NE 0.
    MESSAGE TEXT-M06 TYPE 'E'.
  ENDIF.

*    SELECT SINGLE LGNUM
*      INTO @DATA(LV_LGNUM)
*      FROM T320
*      WHERE WERKS =
*         AND LGORT =

  SELECT *
    INTO TABLE @DATA(LT_ZXCWMT005)
   FROM ZXCWMT005
    WHERE MATNR = @LS_LQUA1-MATNR
       AND WERKS = @LS_LQUA1-WERKS
      AND TANUMO '0'

  .

  SORT LT_ZXCWMT005 BY MBLNR MJAHR.

  READ TABLE LT_ZXCWMT005  INTO DATA(LS_ZXCWMS005INDEX 1.

  SELECT * INTO TABLE @DATA(LT_LTBK)
    FROM LTBK
    WHERE TRART 'A'
      AND MBLNR = @LS_ZXCWMS005-MBLNR
      AND MJAHR = @LS_ZXCWMS005-MJAHR.

  READ TABLE LT_LTBK INTO DATA(LS_LTBKINDEX 1.
  IF SY-SUBRC EQ 0.
    SELECT *
      INTO TABLE @DATA(LT_LTBP)
      FROM  LTBP
      WHERE LGNUM = @LS_LTBK-LGNUM
         AND TBNUM = @LS_LTBK-TBNUM.

    READ TABLE LT_LTBP INTO DATA(LS_LTBPINDEX 1.
****未处理数量.
    DATA(LV_MEN=  LS_LTBP-MENGE - LS_LTBP-TAMEN.

  ENDIF.

  SELECT * FROM MSEG
    WHERE MBLNR = @LS_ZXCWMS005-MBLNR
      AND MJAHR = @LS_ZXCWMS005-MJAHR
      AND XAUTO <> 'X'
    INTO TABLE @DATA(LT_MSEG).

  IF LV_MEN > 0.

    LOOP AT LT_MSEG INTO DATA(LS_MSEGWHERE TBNUM IS NOT INITIAL.
      SELECT SINGLE * FROM MLGN
        WHERE MATNR = @LS_MSEG-MATNR
          AND LGNUM = @LS_MSEG-LGNUM
         AND  ( LETY1 = @LS_LQUA1-LETYP OR LETY2 = @LS_LQUA1-LETYP OR LETY3 = @LS_LQUA1-LETYP )
        INTO @DATA(LS_MLGN).
      CLEAR:LS_LHMNG.
      LS_LHMNG-LETYP = LS_MLGN-LETY1.
      LS_LHMNG-LHMNG = LS_MLGN-LHMG1.
      APPEND LS_LHMNG TO LT_LHMNG.
      CLEAR:LS_LHMNG.
      LS_LHMNG-LETYP = LS_MLGN-LETY2.
      LS_LHMNG-LHMNG = LS_MLGN-LHMG2.
      APPEND LS_LHMNG TO LT_LHMNG.
      CLEAR:LS_LHMNG.
      LS_LHMNG-LETYP = LS_MLGN-LETY3.
      LS_LHMNG-LHMNG = LS_MLGN-LHMG3.
      APPEND LS_LHMNG TO LT_LHMNG.

      DELETE LT_LHMNG WHERE LHMNG 0.

      SORT LT_LHMNG BY LHMNG.

      CLEAR: LS_LHMNG.
      READ TABLE LT_LHMNG INTO LS_LHMNG INDEX 1.
      IF SY-SUBRC NE 0.
        MESSAGE TEXT-M05 TYPE 'E'.
      ENDIF.



      LV_LGNUM = LS_MSEG-LGNUM.
      LV_TBNUM = LS_MSEG-TBNUM.
      LS_TRITE-TBPOS = LS_MSEG-TBPOS.
      LS_TRITE-ANFME = LS_LQUA1-VERME.
      LS_TRITE-ALTME = LS_MSEG-MEINS.
      "LS_TRITE-CHARG = LS_MSEG-CHARG.
      LS_TRITE-LETYP = LS_LHMNG-LETYP.
      LS_TRITE-NLENR = LV_NLENR.

      LS_TRITE-VLENR = ZXCWMS015-LENUM.
      COLLECT LS_TRITE INTO LT_TRITE.
    ENDLOOP.
    IF SY-SUBRC NE 0.
      MESSAGE TEXT-M09 TYPE 'E'.
    ENDIF.

    "break-POINT.

    CALL FUNCTION 'L_TO_CREATE_TR'
      EXPORTING
        I_LGNUM                        = LV_LGNUM
        I_TBNUM                        = LV_TBNUM
*       i_squit                        = 'X'
        IT_TRITE                       = LT_TRITE        I_COMMIT_WORK                  
'X'      
IMPORTING        E_TANUM                        
= LV_TANUM      
EXCEPTIONS        FOREIGN_LOCK                   
1        QM_RELEVANT                    
2        TR_COMPLETED                   
3        XFELD_WRONG                    
4        LDEST_WRONG                    
5        DRUKZ_WRONG                    
6        TR_WRONG                       
7        SQUIT_FORBIDDEN                
8        NO_TO_CREATED                  
9        UPDATE_WITHOUT_COMMIT          
10        NO_AUTHORITY                   
11        PREALLOCATED_STOCK             
12        PARTIAL_TRANSFER_REQ_FORBIDDEN 
13        INPUT_ERROR                    
14        ERROR_MESSAGE                  
99        
OTHERS                         15.    

"break-POINT.    

IF SY-SUBRC <> 0.      
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.      

MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO               
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.      
MESSAGE TEXT-005 TYPE 'E'.    
ELSE.      
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
EXPORTING          
WAIT 'X'.      



REFRESH LT_ZXCWMT005A .      

MOVE-CORRESPONDING LT_ZXCWMT005 TO LT_ZXCWMT005A .      LS_ZXCWMS005




-TANUMO = LV_TANUM.      LS_ZXCWMS005
-LENUM     = ZXCWMS015-LENUM.      LS_ZXCWMS005

-MENGE     = LS_ZXCWMS005-MENGE - LS_LQUA1-VERME.      LS_ZXCWMS005
-MENGE1    = LS_LQUA1-VERME.      LS_ZXCWMS005
-TANUMI ''.      
MODIFY TABLE LT_ZXCWMT005 FROM LS_ZXCWMS005.      


MODIFY  ZXCWMT005 FROM TABLE LT_ZXCWMT005 .      
IF SY-SUBRC EQ .        
COMMIT WORK AND WAIT.        

IF LV_MEN - LS_LQUA1-VERME 0.          
DELETE ZXCWMT005  FROM TABLE LT_ZXCWMT005A.          
IF SY-SUBRC EQ .            
COMMIT WORK AND WAIT.          
ENDIF.        
ELSE.          

MOVE LS_ZXCWMS005  TO LS_ZXCWMS005A.

*          CLEAR LS_ZXCWMS005A-TANUMO.
*          CLEAR LS_ZXCWMS005A-MENGE1.          

READ TABLE LT_ZXCWMT005A ASSIGNING FIELD-SYMBOL(<FS_01>INDEX 1.          
IF SY-SUBRC EQ 0.            <FS_01>
-MENGE = LS_ZXCWMS005-MENGE.          
ENDIF.          
MODIFY  ZXCWMT005 FROM TABLE LT_ZXCWMT005A .        

ENDIF.      
ENDIF.      
MESSAGE S398(00WITH TEXT-M07 LV_TANUM TEXT-M08.    

ENDIF.  
ENDIF.  

"break-POINT.  

IF LV_TANUM IS NOT INITIAL.    

PERFORM FRM_CON_TO USING LV_TANUM                                                             LV_LGNUM 
.  
ENDIF.

ENDFORM.



*&---------------------------------------------------------------------*
*& Form FRM_CON_TO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_LV_TANUM  text
*      -->P_ENDFORM  text
*&---------------------------------------------------------------------*
FORM FRM_CON_TO  USING    LV_TANUM TYPE LTAK-TANUM                                                       LV_LGNUM 
TYPE LTAK-LGNUM.  
DATA:    LS_LQUA      
TYPE TS_LQUA,    LT_LTAK      
TYPE STANDARD TABLE OF LTAK,    LS_LTAK      
TYPE LTAK,    LT_LTAP      
TYPE STANDARD TABLE OF LTAP,    LS_LTAP      
TYPE LTAP,    LT_LTAP_CONF 
TYPE STANDARD TABLE OF LTAP_CONF,    LS_LTAP_CONF 
TYPE LTAP_CONF,    LS_LRF_WKQU  
TYPE LRF_WKQU.  

CLEAR:         LT_LTAK
,         LT_LTAP
,         LT_LTAP_CONF
.  





SELECT SINGLE *    
FROM LTAK    
INTO LS_LTAK   
WHERE LGNUM = LV_LGNUM     
AND TANUM = LV_TANUM     
AND KQUIT ''.  "未确认TO  
IF SY-SUBRC 0.    

APPEND LS_LTAK TO LT_LTAK.    
CLEAR LS_LTAK.    

SELECT *      
FROM LTAP      
INTO TABLE LT_LTAP     
WHERE LGNUM = LV_LGNUM       
AND TANUM = LV_TANUM       
AND PQUIT ''      
.    
IF SY-SUBRC 0.      
CLEAR LS_LTAP.      

LOOP AT LT_LTAP INTO LS_LTAP.        LS_LTAP_CONF
-TANUM = LS_LTAP-TANUM.        LS_LTAP_CONF
-TAPOS = LS_LTAP-TAPOS.        LS_LTAP_CONF
-NISTA = LS_LTAP-VSOLM.        LS_LTAP_CONF
-ALTME = LS_LTAP-ALTME.        LS_LTAP_CONF
-LENUM = LS_LTAP-VLENR.        

APPEND LS_LTAP_CONF TO LT_LTAP_CONF.        
CLEAR LS_LTAP_CONF.      
ENDLOOP.    

ELSE.      

MESSAGE TEXT-006 TYPE 'E'.    

ENDIF.  
ENDIF.  


IF LT_LTAP_CONF[] IS NOT INITIAL.    
CALL FUNCTION 'CONFIRM_TO'      
EXPORTING        I_LGNUM                       
= LV_LGNUM        I_SCREEN_TYPE                 
'DST'      
TABLES        T_TO_ITEMS                    
= LT_LTAP        T_TO_HEADER                   
= LT_LTAK        BULK_CONF                     
= LT_LTAP_CONF      
EXCEPTIONS        TO_CONFIRMED                  
1        TO_DOESNT_EXIST               
2        ITEM_CONFIRMED                
3        ITEM_SUBSYSTEM                
4        ITEM_DOESNT_EXIST             
5        ITEM_WITHOUT_ZERO_STOCK_CHECK 
6        ITEM_WITH_ZERO_STOCK_CHECK    
7        ITEM_SU_BULK_STORAGE          
8        ITEM_NO_SU_BULK_STORAGE       
9        FOREIGN_LOCK                  
10        WRONG_IND_OR_QUANTITIES       
11        WRONG_QUANTITY                
12        DOUBLE_LINES                  
13        KZDIF_WRONG                   
14        NO_DIFFERENCE                 
15        NO_NEGATIVE_QUANTITIES        
16        WRONG_ZERO_STOCK_CHECK        
17        SU_NOT_FOUND                  
18        NO_STOCK_ON_SU                
19        SU_WRONG                      
20        TOO_MANY_SU                   
21        NOTHING_TO_DO                 
22        NO_UNIT_OF_MEASURE            
23        XFELD_WRONG                   
24        UPDATE_WITHOUT_COMMIT         
25        NO_AUTHORITY                  
26        LQNUM_MISSING                 
27        CHARG_MISSING                 
28        NO_SOBKZ                      
29        NO_CHARG                      
30        INTERNAL_ERROR                
31        EMPTY_HEADER                  
32        EMPTY_ITEMS                   
33        NO_2STEP                      
34        WRONG_HU_CONFIGURATION        
35        
OTHERS                        36.    

IF SY-SUBRC 0.      
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
EXPORTING          
WAIT 'X'.      
MESSAGE TEXT-001 TYPE 'S'.      
MESSAGE S398(00WITH TEXT-M07 LV_TANUM TEXT-M09.    
ELSE.      
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.      
MESSAGE TEXT-002 TYPE 'E'.    
ENDIF.  
ELSE.
*       判断是否已完成    
SELECT *      
FROM LTAP      
INTO TABLE LT_LTAP     
WHERE TANUM = LV_TANUM.    
IF SY-SUBRC 0.      
CLEAR LS_LTAP.      
READ TABLE LT_LTAP INTO LS_LTAP INDEX 1.      
IF SY-SUBRC AND LS_LTAP-HOMVE 'X'.        
MESSAGE E398(00WITH  LV_TANUM TEXT-004 .      
ENDIF.    
ENDIF.  
ENDIF.

ENDFORM.
posted @ 2022-12-06 13:25  我肉山  阅读(92)  评论(0)    收藏  举报