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.

      DATA LS_LQUA TYPE TS_LQUA.
****上架
      PERFORM FRM_CREATE_TO USING LS_LQUA.
*   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_TO USING US_LQUA TYPE TS_LQUA.

  DATA:
    LS_T334T           TYPE T334T,
    LT_T337B           TYPE STANDARD TABLE OF T337B,
    LV_NUM_T334T(2)    TYPE N,
    LV_FNAME_T334T(50),
    LT_LGTYP           TYPE STANDARD TABLE OF TS_LGTYP,
    LS_LGTYP           TYPE TS_LGTYP,
    LV_MISCH           TYPE T331-MISCH,           "混储标识
    LT_LGPLA           TYPE STANDARD TABLE OF TS_LQUA,
    LT_LAGP            TYPE STANDARD TABLE OF TS_LAGP,
    LS_LAGP            TYPE TS_LAGP.

  TYPES:
    BEGIN OF TS_LGTYP,
      LGTYP TYPE LGTYP,
      MISCH TYPE T331-MISCH,
    END OF TS_LGTYP,
    BEGIN OF TS_LAGP,
      LGNUM TYPE LAGP-LGNUM,
      LGTYP TYPE LAGP-LGTYP,
      LGPLA TYPE LAGP-LGPLA,
    END OF TS_LAGP.



  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.      "将冲销失败的物料凭证记录到表中,由job执行.

  DATA:LT_ZXCWMT005A TYPE STANDARD TABLE OF ZXCWMT005.

  FIELD-SYMBOLS: <LV_FNAME_T334T> TYPE ANY.

  CLEAR: LV_LGNUM,LV_TANUM,LV_TBNUM,LT_TRITE,LS_TRITE,LT_LHMNG,LS_LHMNG.

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

  SELECT *
    INTO TABLE @DATA(LT_LTAP)
    FROM LTAP
    WHERE VLENR = @ZXCWMS015-LENUM.


  READ TABLE LT_LTAP INTO DATA(LS_LTAPINDEX 1.

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

  SELECT *
    INTO TABLE @DATA(LT_ZXCWMT005)
   FROM ZXCWMT005
    WHERE MATNR = @LS_LTAP-MATNR
       AND WERKS = @LS_LTAP-WERKS
       AND TANUMO <> '0'
      AND TANUMI '0'
      AND LENUM = @ZXCWMS015-LENUM
  .

  "break-POINT.

  SORT LT_ZXCWMT005 BY MBLNR MJAHR.

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


  SELECT * INTO TABLE @DATA(LT_LTBK)
    FROM LTBK
    WHERE TRART 'E'  "类型E代表入库  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_LTAP-LETYP OR LETY2 = @LS_LTAP-LETYP OR LETY3 = @LS_LTAP-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_LTAP-NSOLM.      LS_TRITE
-ALTME = LS_MSEG-MEINS.      
"LS_TRITE-CHARG = LS_MSEG-CHARG.      LS_TRITE
-LETYP = LS_LTAP-LETYP."LS_LHMNG-LETYP.      LS_TRITE
-NLENR = ZXCWMS015-LENUM.


*******ADD BY JIATAI_LCX 20221103  参考ZWMXCE003_PAI  286行逻辑
*         更改目的地仓位     Start(同增强ZWMXC001)      
CLEAR LS_T334T.      
SELECT SINGLE *        
FROM T334T        
INTO LS_T334T       
WHERE LGNUM = LS_MSEG-LGNUM         
AND KZEAR 'E'         
AND LGTKZ ''         
AND BESTQ = LS_MSEG-BESTQ         
AND SOBKZ ''         
AND LAGKL ''         
AND WGFKL ''         
AND BWREF ''         
AND LGREF ''.      
IF SY-SUBRC 0.        
CLEAR: LT_LGTYP,               LV_NUM_T334T
.        
DO 30 TIMES.          
IF LV_NUM_T334T < '10'.            
CONCATENATE 'LS_T334T-LGTY'                        LV_NUM_T334T+1
(1)                   
INTO LV_FNAME_T334T.          
ELSE.            
CONCATENATE 'LS_T334T-LGT'                        LV_NUM_T334T                   

INTO LV_FNAME_T334T.          
ENDIF.          
ASSIGN (LV_FNAME_T334TTO <LV_FNAME_T334T>.          

IF <LV_FNAME_T334T> IS NOT INITIAL.            LS_LGTYP
-LGTYP = <LV_FNAME_T334T>.            
APPEND LS_LGTYP TO LT_LGTYP.            
CLEAR LS_LGTYP.          
ENDIF.          

CLEAR LV_FNAME_T334T.          LV_NUM_T334T 
= LV_NUM_T334T + 1.        
ENDDO.        

IF LT_LGTYP[] IS NOT INITIAL.          
SELECT            LGTYP
,           MISCH            

FROM T331            
WHERE LGNUM = @LS_MSEG-LGNUM            
AND MISCH 'X'            
AND LGTYP <> '917'            
INTO TABLE @DATA(LT_T331)            
.          
SELECT            MLGT
~LGTYP            
FROM MLGT            INNER 
JOIN T337B ON T337B~LGNUM = MLGT~LGNUM                     
AND T337B~LGTYP = MLGT~LGTYP            
WHERE MLGT~MATNR = @LS_MSEG-MATNR            
AND  MLGT~LGNUM = @LS_MSEG-LGNUM            
AND MLGT~LGTYP <> '917'            
AND  MLGT~LVORM NE @ABAP_TRUE            
AND  T337B~LETYP = @LS_TRITE-LETYP            
INTO TABLE @DATA(LT_MLGT).          

LOOP AT LT_LGTYP INTO LS_LGTYP.            
READ TABLE LT_MLGT TRANSPORTING NO FIELDS                           
WITH KEY LGTYP = LS_LGTYP-LGTYP.            
IF SY-SUBRC NE 0.              
READ TABLE LT_T331 TRANSPORTING NO FIELDS                                
WITH KEY LGTYP = LS_LGTYP-LGTYP.              
IF SY-SUBRC NE 0.                
DELETE LT_LGTYP.              
ELSE.                LS_LGTYP
-MISCH 'X'.                
MODIFY LT_LGTYP FROM LS_LGTYP.              
ENDIF.            
ENDIF.          
ENDLOOP.          
SORT LT_LGTYP BY MISCH.          
LOOP AT LT_LGTYP INTO LS_LGTYP.            
CLEAR LT_LGPLA.            
SELECT               LGNUM               LGTYP               LGPLA              



FROM LQUA              
INTO CORRESPONDING FIELDS OF TABLE LT_LGPLA            
WHERE MATNR = LS_MSEG-MATNR              
AND WERKS = LS_MSEG-WERKS              
AND LGNUM = LV_LGNUM              
AND LGTYP = LS_LGTYP-LGTYP.            
IF SY-SUBRC 0.
*  - 如果取得的仓位值不为空,根据上一步所有仓位(LGPLA)、
*  仓位未满(KZVOL为空)从表LAGP中取编号最小的仓位,如果存在记录,
*  将最小仓位赋值给TO的目的仓位(NLPLA);              
CLEAR LT_LAGP.              
SELECT LGNUM                     LGTYP                     LGPLA                


FROM LAGP                
INTO TABLE LT_LAGP              
FOR ALL ENTRIES IN LT_LGPLA            
WHERE LGPLA = LT_LGPLA-LGPLA              
AND LGNUM = LT_LGPLA-LGNUM              
AND LGTYP = LT_LGPLA-LGTYP              
AND KZVOL ''              
AND SKZSE ''              
AND SKZUE ''.            
ENDIF.            

IF LT_LAGP[] IS INITIAL.
*- 如果未找到记录,根据仓库号(LGNUM)、仓储类型(LGTYP)、
*仓位为空(KZLER=X)从表LAGP中取编号最小的仓位并赋值给TO的目的仓位(NLPLA)              
SELECT LGNUM                     LGTYP                     LGPLA                


FROM LAGP                
INTO TABLE LT_LAGP               
WHERE LGNUM = LV_LGNUM                 
AND LGTYP = LS_LGTYP-LGTYP                 
AND KZLER 'X'                 
AND SKZSE ''                 
AND SKZUE ''.            
ENDIF.            

SORT LT_LAGP BY LGPLA.            

IF LT_LAGP[] IS NOT INITIAL.              
CLEAR LS_LAGP.              
READ TABLE LT_LAGP INTO LS_LAGP INDEX 1.              LS_TRITE

-NLTYP = LS_LAGP-LGTYP.              LS_TRITE
-NLPLA = LS_LAGP-LGPLA.              
EXIT.            
ENDIF.            

CLEAR LS_LGTYP.          
ENDLOOP.        
ENDIF.      
ENDIF.
*******ADD BY JIATAI_LCX 20221103  参考ZWMXCE003_PAI  286行逻辑      

" 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.    
ELSE.      
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'        
EXPORTING          
WAIT 'X'.      

"break-POINT.      

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

REFRESH LT_ZXCWMT005A .      

MOVE-CORRESPONDING LT_ZXCWMT005 TO LT_ZXCWMT005A .      LS_ZXCWMS005

-TANUMI = LV_TANUM.      
MODIFY TABLE LT_ZXCWMT005 FROM LS_ZXCWMS005.      


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

DELETE ZXCWMT005  FROM TABLE LT_ZXCWMT005A.      
IF SY-SUBRC EQ .        
COMMIT WORK AND WAIT.      
ENDIF.    
ENDIF.  
ENDIF.  

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 E398(00WITH LV_TANUM TEXT-002 .    
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 @   我肉山  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示