SAP MIGO User Exit

这是一个关于SAP MIGO(物料凭证过账)的用户退出程序,包括读取表格并处理订单数据,检查数量,更新库存,并进行确认。代码涉及到库存管理、订单处理和数据验证等多个环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*&  Include           ZXMBCU01
*&---------------------------------------------------------------------*
*Sequence  Author Date        Description                              *
*M1        Jimmy  2013.01.16  Add Insert PO OA to table zpooa
*   the latest update : 2013.01.16 18:00
*--------------------------------------------------------------------- *
break-point.
                                                            
"M1 add
read table xmseg index 1.
if xmseg-bwart '101' and xmseg-ebeln is not initial
  
and xmseg-mblnr is not initial
  
and xmseg-mjahr is not initial
  
and xmseg-zeile is not initial.

  
data:begin of it_ekes occurs 0,
       ebeln    
like ekes-ebeln,
       ebelp    
like ekes-ebelp,
       etens    
like ekes-etens,
       eindt    
like ekes-eindt,
       menge    
like ekes-menge,
       dabmg    
like ekes-dabmg,
       ebtyp    
like ekes-ebtyp,
       
end of it_ekes.
  
data:it_vc like it_ekes occurs with header line.

  
data:begin of it_eket occurs 0,
       ebeln    
like ekes-ebeln,
       ebelp    
like ekes-ebelp,
       etenr    
like eket-etenr,
       eindt    
like ekes-eindt,
       menge    
like eket-menge,
       wemng    
like eket-wemng,
       
end of it_eket.
  
data:it_zpooa like zpooavc occurs with header line.
  
data:it_zpooavc1 like zpooavc occurs with header line.
  
data:begin of it_oa1 occurs 0,
       ebeln    
like ekes-ebeln,
       ebelp    
like ekes-ebelp,
       zoaetens 
like eket-etenr,
       menge    
like eket-menge,
       
end of it_oa1.
  
data:it_oa like it_oa1 occurs with header line.
  
data:it_zpooavc like it_oa1 occurs with header line.
  
data:lv_menge like mseg-menge,
       lv_menge_oa 
like mseg-menge,
       lv_menge2 
like mseg-menge,
       lv_menge3 
like mseg-menge,
       lv_tabix 
like sy-tabix.
  
select  ebeln ebelp etenr menge wemng eindt
   
into corresponding fields of table it_eket
   
from eket
   
for all entries in xmseg
   
where ebeln xmseg-ebeln
       
and ebelp xmseg-ebelp.
  
sort it_eket by ebeln ebelp.

  
"OA
  
select ebeln ebelp etens eindt  menge dabmg ebtyp
      
into corresponding fields of table it_ekes
    
from ekes
    
for all entries in xmseg
     
where ebeln xmseg-ebeln
         
and ebelp xmseg-ebelp
          
and ebtyp 'OA'
          
and loekz space.
  
delete it_ekes where eindt eq '00000000' .
  
delete it_ekes where dabmg eq 0 .
  
if it_ekes[] is not initial.
    
sort it_ekes by ebeln ebelp ascending eindt descending.
    
select distinct ebeln ebelp zoaetens menge
      
into corresponding fields of table it_oa1
      
from zpooavc
      
for all entries in it_ekes
      
where ebeln it_ekes-ebeln
        
and ebelp it_ekes-ebelp
        
and zoaetens it_ekes-etens.
    
if it_oa1[] is not initial.
      
loop at it_oa1.
        
move-corresponding it_oa1 to it_oa.
        
collect it_oa.
      
endloop.
      
sort it_oa by  ebeln ebelp zoaetens.
      
loop at  it_ekes.
        lv_tabix 
sy-tabix.
        
read table it_oa with  key ebeln it_ekes-ebeln ebelp it_ekes-ebelp zoaetens it_ekes-etens binary search.
        
if sy-subrc eq 0.
          
if  it_oa-menge >= it_ekes-dabmg.
            
delete it_ekes index lv_tabix.
          
else.
            it_ekes
-dabmg =  it_ekes-dabmg it_oa-menge.
            
modify it_ekes index lv_tabix.
          
endif.
        
endif.
      
endloop.
    
endif.
  
endif.
  
sort it_ekes by ebeln ebelp eindt.

  
"VC FI
  
select ebeln ebelp etens eindt  menge dabmg ebtyp
      
into corresponding fields of table it_vc
    
from ekes
    
for all entries in xmseg
     
where ebeln xmseg-ebeln
         
and ebelp xmseg-ebelp
          
and ebtyp in ('VC' ,'FI')
          
and loekz space.
  
delete it_vc where eindt eq '00000000' .
  
sort it_vc by ebeln ebelp ebtyp ascending eindt descending.
  
if it_vc[] is not initial.
    
select *
      
into corresponding fields of table it_zpooavc1
      
from zpooavc
      
for all entries in it_vc
      
where ebeln it_vc-ebeln
        
and ebelp it_vc-ebelp
        
and zvcetens it_vc-etens.
    
if it_zpooavc1[] is not initial.
      
loop at  it_zpooavc1.
        it_zpooavc
-ebeln it_zpooavc1-ebeln.
        it_zpooavc
-ebelp it_zpooavc1-ebelp.
        it_zpooavc
-zoaetens it_zpooavc1-zvcetens.
        it_zpooavc
-menge it_zpooavc1-zvcmenge.
        
collect it_zpooavc.
      
endloop.
      
sort it_zpooavc by  ebeln ebelp zoaetens.
      
loop at it_vc.
        lv_tabix 
sy-tabix.
        
read table it_zpooavc with  key  ebeln it_vc-ebeln ebelp it_vc-ebelp zoaetens  it_vc-etens binary search.
        
if sy-subrc eq 0.
          
if it_zpooavc-menge >= it_vc-menge.
            
delete it_vc index lv_tabix.
          
else.
            it_vc
-dabmg =  it_zpooavc-menge.
            
modify  it_vc index lv_tabix.
          
endif.
        
endif.
      
endloop.
    
endif.
  
endif.
  
sort it_vc by ebeln ebelp ascending  ebtyp descending  eindt ascending.

  
loop at xmseg.
    lv_menge 
xmseg-menge.
    
read table it_ekes with  key ebeln xmseg-ebeln ebelp xmseg-ebelp.
    
if sy-subrc eq 0.
      
loop at it_ekes where ebeln xmseg-ebeln and ebelp xmseg-ebelp and dabmg > 0.
        
loop at it_vc.
          
if it_vc-menge <= it_vc-dabmg.
            
delete it_vc.
          
endif.
        
endloop.
        
if it_vc[] is not initial.
          
sort it_vc by ebeln ebelp ascending  ebtyp descending  eindt ascending.
        
endif.
        lv_menge2 
it_ekes-dabmg.
        it_zpooa
-mblnr xmseg-mblnr .
        it_zpooa
-mjahr xmseg-mjahr.
        it_zpooa
-zeile xmseg-zeile.
        it_zpooa
-ebeln xmseg-ebeln .
        it_zpooa
-ebelp xmseg-ebelp.
        it_zpooa
-zoaetens it_ekes-etens.
        it_zpooa
-zoaebtyp it_ekes-ebtyp.
        it_zpooa
-zoaeindt it_ekes-eindt.
        it_zpooa
-bwart xmseg-bwart .
        
if lv_menge2 >= lv_menge.
          it_zpooa
-menge lv_menge.
          lv_menge_oa 
lv_menge .
          
read table it_vc  with  key ebeln xmseg-ebeln ebelp xmseg-ebelp.
          
if sy-subrc eq 0.
            
loop at it_vc  where ebeln xmseg-ebeln and ebelp xmseg-ebelp .
              lv_tabix 
sy-tabix.
              lv_menge3 
it_vc-menge it_vc-dabmg.
              it_zpooa
-zvcetens it_vc-etens.
              it_zpooa
-zvcebtyp it_vc-ebtyp.
              it_zpooa
-zvceindt it_vc-eindt.
              
if lv_menge3 >= lv_menge_oa.
                it_zpooa
-zvcmenge lv_menge_oa.
                
append it_zpooa.
                it_vc
-dabmg it_vc-dabmg + it_zpooa-zvcmenge.
                
modify it_vc index lv_tabix.
                
clear:lv_menge3.
                
exit.
              
else.
                it_zpooa
-zvcmenge lv_menge3.
                it_vc
-dabmg it_vc-dabmg + it_zpooa-zvcmenge.
                
modify it_vc index lv_tabix.
                
append it_zpooa.
              
endif.
              lv_menge_oa 
lv_menge_oa lv_menge3 .
            
endloop.
          
else.
            
clear:it_zpooa-zvcetens, it_zpooa-zvcebtyp ,it_zpooa-zvceindt, it_zpooa-zvcmenge.
            
append it_zpooa.
          
endif.
          
clear:it_zpooa,lv_menge,lv_menge_oa.
          
exit.
        
else.
          it_zpooa
-menge lv_menge2.
          lv_menge_oa 
lv_menge2 .
          
read table it_vc  with  key ebeln xmseg-ebeln ebelp xmseg-ebelp.
          
if sy-subrc eq 0.
            
loop at it_vc  where ebeln xmseg-ebeln and ebelp xmseg-ebelp.
              lv_tabix 
sy-tabix.
              lv_menge3 
it_vc-menge it_vc-dabmg.
              it_zpooa
-zvcetens it_vc-etens.
              it_zpooa
-zvcebtyp it_vc-ebtyp.
              it_zpooa
-zvceindt it_vc-eindt.
              
if lv_menge3 >= lv_menge_oa.
                it_zpooa
-zvcmenge lv_menge_oa.
                
append it_zpooa.
                it_vc
-dabmg it_vc-dabmg + it_zpooa-zvcmenge.
                
modify it_vc index lv_tabix.
                
clear:lv_menge3.
                
exit.
              
else.
                it_zpooa
-zvcmenge lv_menge3.
                
append it_zpooa.
                it_vc
-dabmg it_vc-dabmg + it_zpooa-zvcmenge.
                
modify it_vc index lv_tabix.
              
endif.
              lv_menge_oa 
lv_menge_oa lv_menge3 .
            
endloop.
          
else.
            
clear:it_zpooa-zvcetens, it_zpooa-zvcebtyp ,it_zpooa-zvceindt, it_zpooa-zvcmenge.
            
append it_zpooa.
          
endif.
        
endif.
        lv_menge 
lv_menge lv_menge2 .
      
endloop.
      
if lv_menge > 0.
        
read table it_eket with key ebeln xmseg-ebeln ebelp xmseg-ebelp.
        
if sy-subrc eq 0.
          it_zpooa
-mblnr xmseg-mblnr .
          it_zpooa
-mjahr xmseg-mjahr.
          it_zpooa
-zeile xmseg-zeile.
          it_zpooa
-ebeln xmseg-ebeln .
          it_zpooa
-ebelp xmseg-ebelp.
          it_zpooa
-zoaetens it_eket-etenr.
          it_zpooa
-zoaeindt it_eket-eindt.
          it_zpooa
-bwart xmseg-bwart .
          it_zpooa
-menge lv_menge.
          
append it_zpooa.
          
clear:it_zpooa.
        
endif.
      
endif.
    
else.
      
read table it_eket with key ebeln xmseg-ebeln ebelp xmseg-ebelp.
      
if sy-subrc eq 0.
        it_zpooa
-mblnr xmseg-mblnr .
        it_zpooa
-mjahr xmseg-mjahr.
        it_zpooa
-zeile xmseg-zeile.
        it_zpooa
-ebeln xmseg-ebeln .
        it_zpooa
-ebelp xmseg-ebelp.
        it_zpooa
-zoaetens it_eket-etenr.
        it_zpooa
-zoaeindt it_eket-eindt.
        it_zpooa
-bwart xmseg-bwart .
        it_zpooa
-menge lv_menge.
        
append it_zpooa.
        
clear:it_zpooa.
      
endif.
    
endif.
    
clear:lv_menge.
  
endloop.
  
if not it_zpooa[] is initial.
    
modify zpooavc from table it_zpooa.
    
refresh it_zpooa.
    
free:it_zpooa,it_eket,it_eket,it_zpooavc,it_zpooavc1,it_vc,it_oa,it_oa1.
  
endif.
endif.
*M1 end

 

*&---------------------------------------------------------------------*
*&  Include           ZXMBCU02
*&---------------------------------------------------------------------*
*Sequence  Author Date        Description                              *
*M1        Jimmy  2013.01.04  Check Migo FG Qty && CO03 Confirmed Qty
*M2        Jimmy  2013.01.09  No check production order < 1000000
*   the latest update : 2013.01.04 18:00
*--------------------------------------------------------------------- *

data:lv_auth type c.
if i_mseg-bwart '101'.
*M2 add
  
check i_mseg-aufnr is not initial.

  
data:lv_aufnr like mseg-aufnr,
       lv_len 
type i.
  
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
    
exporting
      
input  i_mseg-aufnr
    
importing
      
output lv_aufnr.
  lv_len 
strlenlv_aufnr ).
  
check lv_len > 6.
*M2 End
  
data:it_afko like afko occurs with header line.
  
data:it_afpo like afpo occurs with header line.
  
data:it_afvv like afvv occurs with header line.
  
data:lv_psmng like afpo-psmng , " total qty
       lv_wemng 
like afpo-wemng , " deliver qty
       lv_lmnga 
like afvv-lmnga . " Confirmed qty

  
select into corresponding fields of table it_afko
    
from afko
    
where aufnr i_mseg-aufnr.

  
if it_afko[] is not initial.
    
select  into  corresponding fields of table it_afpo
      
from afpo
      
for all entries in it_afko
      
where aufnr it_afko-aufnr.
    
sort it_afpo by posnr descending.

    
select  into corresponding fields of table it_afvv
      
from afvv
      
for all entries in it_afko
      
where aufpl it_afko-aufpl.
    
sort it_afvv by aplzl descending.

    
read table it_afpo  index 1 .
    
if sy-subrc eq 0.
      lv_psmng 
=  it_afpo-psmng .
      lv_wemng 
=  it_afpo-wemng  .
    
endif.
    
read table it_afvv index 1 .
    
if sy-subrc eq 0.
      lv_lmnga 
=  it_afvv-lmnga.
    
endif.
    lv_wemng 
lv_wemng + i_mseg-menge.
    
if lv_wemng > lv_lmnga.
      lv_auth 
'X'.
    
endif.
  
endif.
  
if lv_auth 'X'.
    
message e007(zmm).
  
endif.
endif.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值