进销存明细表(含双击跳转)


《进销存明细表(含双击跳转)》

《进销存明细表(含双击跳转)》

《进销存明细表(含双击跳转)》

*&———————————————————————*

*& Report  ZMMR004

*&

*&———————————————————————*

*&

*&

*&———————————————————————*

REPORT  zmmr004 
NO 
STANDARD 
PAGE HEADING
.

TABLES
mbewh
mara
mard
mkpf
.

*kk

TYPE-POOLS
slis
.

DATA

BEGIN 
OF gt_itab 
OCCURS 
0
,

        matnr 
LIKE mara
matnr
,                           
“物料号

        maktx 
LIKE makt
maktx
,                           
“物料描述

        meins 
LIKE mara
meins
,                           
“单位

        zsqjc 
LIKE mseg
menge
,                           
“上期结存

        zbqjh 
LIKE mseg
menge
,                           
“本期进货

        zbqth 
LIKE mseg
menge
,                           
“本期退货

        bqbcs 
LIKE mseg
menge
,                           
“本期拨出数

        bqbrs 
LIKE mseg
menge
,                           
“本期拨入数

        cbzxf 
LIKE mseg
menge
,                           
“成本中心发料数

        cbzxt 
LIKE mseg
menge
,                           
“成本中心退料数

        zbqhy 
LIKE mseg
menge
,                           
“本期耗用

        zbqjc 
LIKE mseg
menge
,                           
“本期结存

        lgort 
LIKE mseg
lgort
,                           
“库位

        lgobe 
LIKE t001l
lgobe
,                          
“库位描述

        werks 
LIKE mseg
werks
,

        zqty  
LIKE mseg
menge
,

        reffi 
TYPE mara
meins
,

      
END 
OF gt_itab
.

DATA
gt_itab2 
LIKE gt_itab 
OCCURS 
0  
WITH 
HEADER 
LINE  
.

DATA

BEGIN 
OF gt_matr 
OCCURS 
0
,

        matnr 
LIKE mara
matnr
,

        lgort 
LIKE mard
lgort
,

      
END 
OF gt_matr
.

DATA

BEGIN 
OF gt_mbew 
OCCURS 
0
,

        matnr 
LIKE mara
matnr
,

        werks 
LIKE mard
werks
,

        lgort 
LIKE mard
lgort
,

        lbkum 
LIKE mbewh
lbkum
,

        insme 
LIKE mardh
insme
,

        speme 
LIKE mardh
speme
,

      
END 
OF gt_mbew
.

DATA

BEGIN 
OF gt_mseg 
OCCURS 
0
,

        matnr 
LIKE mara
matnr
,

        werks 
LIKE mseg
werks
,

        lgort 
LIKE mseg
lgort
,

        bwart 
LIKE mseg
bwart
,

        shkzg 
LIKE mseg
shkzg
,

        menge 
LIKE mseg
menge
,

        meins 
LIKE mseg
meins
,

        smbln 
LIKE mseg
smbln
,

        smblp 
LIKE mseg
smblp
,

        mblnr 
LIKE mseg
mblnr
,

        zeile 
LIKE mseg
zeile
,

        insmk 
LIKE mseg
insmk
,

        urzei 
LIKE mseg
urzei 

“原始行项目主要是调拨时会有问题 质检

      
END 
OF gt_mseg
.

DATA
gt_mseg2 
LIKE gt_mseg 
OCCURS 

WITH 
HEADER 
LINE
.

DATA
gt_mseg3 
LIKE gt_mseg 
OCCURS 

WITH 
HEADER 
LINE
.

DATA
gt_mseg4 
LIKE gt_mseg 
OCCURS 

WITH 
HEADER 
LINE
.

DATA
budat_low  
LIKE mkpf
budat
,

      budat_high 
LIKE mkpf
budat
,

      year
(
4
)    
TYPE 
c
,

      month
(
2
)   
TYPE 
c
,

      year1
(
4
)   
TYPE 
c
,

      mont1
(
2
)   
TYPE 
c
,

      year2
(
4
)   
TYPE 
c
,

      mont2
(
2
)   
TYPE 
c
,

      date1      
LIKE mkpf
budat
,

      date3      
LIKE mkpf
budat
,

      date2      
LIKE mkpf
budat
.

DATA

BEGIN 
OF gs_mbmps
,

        smbln 
LIKE m_mbmps
smbln
,

        smblp 
LIKE m_mbmps
smblp
,

        mblnr 
LIKE m_mbmps
mblnr
,

        zeile 
LIKE m_mbmps
zeile
,

      
END 
OF gs_mbmps
.

DATA 
gt_mbmps 
LIKE 
TABLE 
OF gs_mbmps 
.

*DATA: BEGIN OF gs_qals,

*        mblnr LIKE qals-mblnr,

*        zeile LIKE qals-zeile,

*      END OF gs_qals.

*

*DATA gt_qals LIKE TABLE OF gs_qals .

DATA

BEGIN 
OF gs_qamb
,

        mblnr 
LIKE qamb
mblnr
,

        zeile 
LIKE qamb
zeile
,

        werk  
LIKE mseg
werks
,

      
END 
OF gs_qamb
.

DATA gt_qamb 
LIKE 
TABLE 
OF gs_qamb 
.

DATA gt_qamb2 
LIKE 
TABLE 
OF gs_qamb 
.

DATA
qmatv 
LIKE marc
qmatv
.

DATA

TYPE 
i
.

*&———————————————————————*

*&      SELECTION-SCREEN

*&———————————————————————*

SELECTION-SCREEN
:
BEGIN 
OF 
BLOCK blk1 
WITH 
FRAME  
TITLE 
TEXT

001
.

PARAMETERS
:p_werks 
LIKE mard
werks 
DEFAULT 
‘1000’
.

SELECT-OPTIONS
s_budat 
FOR mkpf
budat OBLIGATORY 
DEFAULT sy
datum
,

                s_lgort 
FOR mard
lgort
,

                s_mtart 
FOR mara
mtart
,

                s_matkl 
FOR mara
matkl
,

                s_matnr 
FOR mara
matnr
.

SELECTION-SCREEN 
END 
OF 
BLOCK blk1
.

AT 
SELECTION-SCREEN 
OUTPUT
.

  
LOOP 
AT s_budat
.

    
IF s_budat
low 
IS 
INITIAL 
AND s_budat
high 
IS 
NOT 
INITIAL
.

      
CONCATENATE sy
datum+0
(
6

’01’ 
INTO s_budat
low
.

*      s_budat-low = s_budat-high.

      
MODIFY s_budat
.

    
ELSEIF s_budat
high 
IS 
INITIAL 
AND s_budat
low 
IS 
NOT 
INITIAL
.

      s_budat
high 
s_budat
low
.

      
CONCATENATE sy
datum+0
(
6

’01’ 
INTO s_budat
low
.

      
MODIFY s_budat
.

    
ENDIF
.

  
ENDLOOP
.

*&———————————————————————*

*&      START_OF_SELECTION

*&———————————————————————*

START-OF-SELECTION
.

  
PERFORM get_data
.

  
PERFORM process_data
.

*&———————————————————————*

*&      END_OF_SELECTION

*&———————————————————————*

END-OF-SELECTION
.

  
PERFORM write_data
.

*&———————————————————————*

*&      Form  GET_DATA

*&———————————————————————*

*       text

*———————————————————————-*

*  –>  p1        text

*  <–  p2        text

*———————————————————————-*

FORM get_data 
.

  
READ 
TABLE s_budat 
INDEX 
1
.

  
CONCATENATE s_budat
low+0
(
4
s_budat
low+4
(
2

’01’ 
INTO budat_low
.

  budat_high 
s_budat
low
.

  year 
s_budat
low+0
(
4
)
.

  month 
s_budat
low+4
(
2
)
.

  
IF month 

’01’
.

    month 

’12’
.

    year 
year 
– 
1
.

  
ELSE
.

    month 
month 
– 
1
.

  
ENDIF
.

  
CALL 
FUNCTION 
‘CONVERSION_EXIT_ALPHA_INPUT’

    
EXPORTING

      
input  
month

    
IMPORTING

      
output 
month

    
EXCEPTIONS

      
OTHERS 

1
.

  mont1 
month
.

  year1 
year
.

  
CLEAR s_budat
.

  
SELECT a
~matnr b
~werks b
~lgort  
INTO 
TABLE gt_mbew

   
FROM mara 
AS a INNER 
JOIN mard 
AS 
ON b
~matnr 
a
~matnr

*   INNER JOIN MBEW AS C ON C~MATNR = A~MATNR

   
WHERE a
~matnr 
IN s_matnr

     
AND a
~matkl 
IN s_matkl

     
AND a
~mtart 
IN s_mtart

     
AND b
~lgort 
IN s_lgort

     
AND b
~werks 
EQ p_werks
.

*     AND B~LABST NE 0.

*  loop at gt_mbew.

*

*    do.

*      n = n + 1.

*      select single labst insme speme into (gt_mbew-lbkum, gt_mbew-insme, gt_mbew-speme)

*                                             from mardh where matnr = gt_mbew-matnr

*                                                          and lgort = gt_mbew-lgort

*                                                          and lfgja = year

*                                                          and lfmon = month

*                                                          and werks = gt_mbew-werks.

*      if sy-subrc = 0.

*        if month = ’12’.

*          year2 = year + 1.

*          mont2 = ’01’.

*        else.

*          year2 = year.

*          mont2 = month + 1.

*        endif.

*        call function ‘CONVERSION_EXIT_ALPHA_INPUT’

*          exporting

*            input  = mont2

*          importing

*            output = mont2

*          exceptions

*            others = 1.

*        concatenate year2 mont2 ’01’ into date3.

*

*        select a~matnr a~werks a~lgort a~bwart a~shkzg a~menge a~meins a~smbln a~smblp a~mblnr a~zeile into gt_mseg2

*           from mseg as a inner join mkpf as b on b~mblnr = a~mblnr

*           inner join mara as c on c~matnr = a~matnr

*            where a~matnr in s_matnr

*             and c~matkl in s_matkl

*             and c~mtart in s_mtart

*             and a~lgort in s_lgort

*             and a~matnr = gt_mbew-matnr

*             and a~lgort = gt_mbew-lgort

*             and a~werks = gt_mbew-werks

**             and b~budat >= date3

*             and b~budat < budat_high .

*          append gt_mseg2.

*          clear gt_mseg2.

*        endselect.

*

*        n = 0.

*        year = year1.

*        month = mont1.

*        exit.

*      elseif n = 12.

*        n = 0.

*        year = year1.

*        month = mont1.

*        exit.

*      else.

*        if month = ’01’.

*          month = ’12’.

*          year = year – 1.

*        else.

*          month = month – 1.

*          call function ‘CONVERSION_EXIT_ALPHA_INPUT’

*            exporting

*              input  = month

*            importing

*              output = month

*            exceptions

*              others = 1.

*        endif.

*      endif.

*    enddo.

*

*    modify gt_mbew.

*  endloop.

  
SELECT a
~matnr a
~werks a
~lgort a
~bwart a
~shkzg a
~menge a
~meins  a
~smbln a
~smblp a
~mblnr a
~zeile a
~insmk a
~urzei 
INTO 
TABLE gt_mseg2

  
FROM mseg 
AS a INNER 
JOIN mkpf 
AS 
ON b
~mblnr 
a
~mblnr

  INNER 
JOIN mara 
AS 

ON 
c
~matnr 
a
~matnr

  
WHERE a
~matnr 
IN s_matnr

    
AND 
c
~matkl 
IN s_matkl

    
AND 
c
~mtart 
IN s_mtart

    
AND a
~lgort 
IN s_lgort

    
AND a
~werks 
EQ p_werks

    
AND b
~budat < budat_low

            %_HINTS

DB6 
‘<NLJOIN><IXSCAN TABLE=’
‘MSEG’
‘ SAP_INDEX=’
‘M’
‘/>’
‘</NLJOIN>’
.

  
SELECT a
~matnr a
~werks a
~lgort a
~bwart a
~shkzg a
~menge a
~meins  a
~smbln a
~smblp a
~mblnr a
~zeile a
~insmk a
~urzei 
INTO 
TABLE gt_mseg

  
FROM mseg 
AS a INNER 
JOIN mkpf 
AS 
ON b
~mblnr 
a
~mblnr

  INNER 
JOIN mara 
AS 

ON 
c
~matnr 
a
~matnr

  
WHERE a
~matnr 
IN s_matnr

    
AND 
c
~matkl 
IN s_matkl

    
AND 
c
~mtart 
IN s_mtart

    
AND a
~lgort 
IN s_lgort

    
AND b
~budat 
IN s_budat

    
AND a
~werks 
EQ p_werks

            %_HINTS

DB6 
‘<NLJOIN><IXSCAN TABLE=’
‘MSEG’
‘ SAP_INDEX=’
‘M’
‘/>’
‘</NLJOIN>’
.

*  SELECT A~MATNR A~LGORT A~BWART A~SHKZG A~MENGE A~MEINS INTO TABLE GT_MSEG2

* FROM MSEG AS A INNER JOIN MKPF AS B ON B~MBLNR = A~MBLNR

* INNER JOIN MARA AS C ON C~MATNR = A~MATNR

* WHERE A~MATNR IN S_MATNR

*   AND C~MATKL IN S_MATKL

*   AND C~MTART IN S_MTART

*   AND A~LGORT IN S_LGORT

*   AND B~BUDAT >= BUDAT_LOW

*   AND B~BUDAT < BUDAT_HIGH .

  
SELECT

       smbln

       smblp

       mblnr

       zeile

    
INTO 
TABLE gt_mbmps

    
FROM   m_mbmps 
.

  
IF gt_mseg2[] 
IS 
NOT 
INITIAL   
.

    
SELECT a
~mblnr a
~zeile  b
~werk

      
INTO 
TABLE  gt_qamb

      
FROM qamb 
AS  a

      
JOIN qals 
AS 
ON a
~prueflos 
b
~prueflos

      
FOR 
ALL ENTRIES 
IN gt_mseg2

      
WHERE a
~mblnr 
gt_mseg2
mblnr

       
AND  a
~zeile 
gt_mseg2
urzei
.

  
ENDIF 
.

  
IF gt_mseg[] 
IS 
NOT 
INITIAL   
.

    
SELECT a
~mblnr a
~zeile b
~werk

      
INTO 
TABLE  gt_qamb2

      
FROM qamb 
AS a

      
JOIN qals  
AS 
ON a
~prueflos 
b
~prueflos

      
FOR 
ALL ENTRIES 
IN gt_mseg

      
WHERE a
~mblnr 
gt_mseg
mblnr

       
AND  a
~zeile 
gt_mseg
urzei
.

  
ENDIF 
.

  
LOOP 
AT gt_qamb2 
INTO gs_qamb 
.

    
APPEND gs_qamb 
TO gt_qamb 
.

  
ENDLOOP 
.

ENDFORM
.                    
” GET_DATA

*&———————————————————————*

*&      Form  PROCESS_DATA

*&———————————————————————*

*       text

*———————————————————————-*

*  –>  p1        text

*  <–  p2        text

*———————————————————————-*

FORM process_data 
.

  
DATA lv_tabix 
TYPE sy
tabix 
.

  
SORT   gt_mbmps 
BY   smbln   smblp 
.

  
” 去冲销

  
LOOP 
AT gt_mseg2 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_mbmps 
WITH 
KEY smbln 
gt_mseg2
mblnr

                                 smblp 
gt_mseg2
zeile

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ELSEIF gt_mseg2
lgort 
IS 
INITIAL 
.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
” 去冲销

  
LOOP 
AT gt_mseg 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_mbmps 
WITH 
KEY smbln 
gt_mseg
mblnr

                                 smblp 
gt_mseg
zeile

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
DELETE gt_mseg  
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
” ” 去被冲销

  
SORT   gt_mbmps 
BY mblnr  zeile 
.

  
LOOP 
AT gt_mseg2 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_mbmps 
WITH 
KEY mblnr  
gt_mseg2
mblnr

                                 zeile  
gt_mseg2
zeile

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ELSEIF  gt_mseg2
lgort 
IS 
INITIAL 
.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
” 去被冲销

  
LOOP 
AT gt_mseg 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_mbmps 
WITH 
KEY mblnr  
gt_mseg
mblnr

                                 zeile  
gt_mseg
zeile

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
DELETE gt_mseg 
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
“去质检验,处理转储 -期初

  
SORT gt_qamb 
BY mblnr zeile werk 
.

  
LOOP 
AT gt_mseg2 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_qamb 
WITH 
KEY  mblnr  
gt_mseg2
mblnr

                                 zeile  
gt_mseg2
urzei

                                 werk   
gt_mseg2
werks

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
IF  gt_mseg2
bwart <> 
‘321’ 
AND  gt_mseg2
bwart <>  
‘322’ 
.

        
DELETE gt_mseg2 
INDEX lv_tabix 
.

      
ENDIF 
.

    
ENDIF 
.

    
” 321 只保留方

    
IF gt_mseg2
bwart 
EQ 
‘321’ 
AND gt_mseg2
shkzg 
EQ  
‘H’
.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ENDIF 
.

    
IF gt_mseg2
bwart 
EQ 
‘322’ 
AND gt_mseg2
shkzg 
EQ  
‘S’
.

      
DELETE gt_mseg2 
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
” 去质检验,处理转储-区间

  
LOOP 
AT gt_mseg 
.

    
CLEAR lv_tabix 
.

    lv_tabix 
=  sy
tabix  
.

    
READ 
TABLE gt_qamb 
WITH 
KEY  mblnr  
gt_mseg
mblnr

                                 zeile  
gt_mseg
urzei

                                 werk   
gt_mseg
werks

                                 
BINARY 
SEARCH

                                 
TRANSPORTING 
NO 
FIELDS 
.

    
IF sy
subrc 
EQ 

.

      
IF  gt_mseg
bwart <> 
‘321’ 
AND  gt_mseg
bwart <> 
‘322’  
.

        
DELETE gt_mseg 
INDEX lv_tabix 
.

      
ENDIF 
.

    
ENDIF 
.

    
” 321 只保留方

    
IF gt_mseg
bwart 
EQ 
‘321’ 
AND gt_mseg
shkzg 
EQ  
‘H’
.

      
DELETE gt_mseg 
INDEX lv_tabix 
.

    
ENDIF 
.

    
IF gt_mseg
bwart 
EQ 
‘322’ 
AND gt_mseg
shkzg 
EQ  
‘S’
.

      
DELETE gt_mseg 
INDEX lv_tabix 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
“汇总期初

  
SORT gt_mseg2 
BY matnr  werks   lgort
.

  
LOOP 
AT gt_mseg2
.

    gt_itab
matnr 
gt_mseg2
matnr 
.

    gt_itab
werks 
gt_mseg2
werks  
.

    gt_itab
lgort 
gt_mseg2
lgort 
.

    
IF gt_mseg2
shkzg 
EQ 
‘S’
.

      gt_itab
zsqjc 
=   gt_itab
zsqjc + gt_mseg2
menge 
.

    
ELSE 
.

      gt_itab
zsqjc 
=   gt_itab
zsqjc + gt_mseg2
menge * 




.

    
ENDIF 
.

    
AT 
END 
OF  lgort 
.

      
APPEND gt_itab 
.

      
CLEAR gt_itab
.

    
ENDAT
.

  
ENDLOOP 
.

*汇总期间

  
SORT gt_mseg 
BY matnr  werks   lgort
.

  
LOOP 
AT gt_mseg
.

    gt_itab2
matnr 
gt_mseg
matnr 
.

    gt_itab2
werks 
gt_mseg
werks  
.

    gt_itab2
lgort 
gt_mseg
lgort 
.

    
IF gt_mseg
shkzg 
EQ 
‘S’
.

      gt_itab2
zbqjh 
=   gt_itab2
zbqjh + gt_mseg
menge 
.

    
ELSE 
.

      gt_itab2
zbqth 
=   gt_itab2
zbqth + gt_mseg
menge * 




.

    
ENDIF 
.

    
AT 
END 
OF  lgort 
.

      
APPEND gt_itab2 
.

      
CLEAR gt_itab2
.

    
ENDAT
.

  
ENDLOOP 
.

  
” 汇总期末

  
SORT gt_itab 
BY matnr werks lgort 
.

  
LOOP 
AT gt_itab2 
.

    
CLEAR gt_itab 
.

    
READ 
TABLE gt_itab 
WITH 
KEY matnr 
gt_itab2
matnr

                                werks 
gt_itab2
werks

                                lgort 
gt_itab2
lgort

                                
BINARY 
SEARCH
.

    
IF sy
subrc 
EQ 

.

      gt_itab
zbqjh  
gt_itab2
zbqjh 
.

      gt_itab
zbqth  
gt_itab2
zbqth
.

      gt_itab
zbqjc  
gt_itab
zsqjc + gt_itab
zbqjh + gt_itab
zbqth 
.  
“上面汇总时已经成负数

      
MODIFY gt_itab 
INDEX sy
tabix 
.

    
ELSE 
.

      gt_itab
matnr 
gt_itab2
matnr
.

      gt_itab
werks 
gt_itab2
werks
.

      gt_itab
lgort 
gt_itab2
lgort 
.

      gt_itab
zbqjh  
gt_itab2
zbqjh 
.

      gt_itab
zbqth  
gt_itab2
zbqth
.

      gt_itab
zbqjc  
gt_itab
zsqjc + gt_itab
zbqjh +  gt_itab
zbqth 
.  
“上面汇总时已经成负数

      
APPEND gt_itab 
.

      
SORT gt_itab 
BY matnr werks lgort 
.

    
ENDIF 
.

  
ENDLOOP 
.

  
LOOP 
AT gt_itab  
.

    gt_itab
zbqjc  
gt_itab
zsqjc + gt_itab
zbqjh +  gt_itab
zbqth 
.

    
SELECT 
SINGLE lgobe 
INTO gt_itab
lgobe 
FROM t001l 
WHERE lgort 
gt_itab
lgort
.

    
SELECT 
SINGLE meins 
INTO gt_itab
meins 
FROM mara 
WHERE matnr 
gt_itab
matnr
.

    
SELECT 
SINGLE maktx 
INTO gt_itab
maktx 
FROM makt 
WHERE matnr 
gt_itab
matnr
.

    
MODIFY gt_itab 
.

  
ENDLOOP 
.

*

*

*

*  IF gt_mseg2[] IS NOT INITIAL.

*    LOOP AT gt_mseg2.

*

*      IF gt_mseg2-bwart = ‘321’.

*        IF gt_mseg2-shkzg = ‘S’  AND gt_mseg2-matnr = ‘123213’.

*          DELETE gt_mseg2.

*        ELSEIF gt_mseg2-shkzg = ‘H’.

*          DELETE gt_mseg2.

*          CONTINUE.

*        ENDIF.

*      ELSEIF gt_mseg2-bwart = ‘322’.

*        IF gt_mseg2-shkzg = ‘H’.

*          DELETE gt_mseg2.

*          CONTINUE.

*        ELSE.

*          gt_mseg2-menge = gt_mseg2-menge * ( -1 ).

*        ENDIF.

*      ELSE.

*

*

*      ENDIF.

*      MODIFY gt_mseg2.

*

*    ENDLOOP.

*  ENDIF.

*  DELETE gt_mseg WHERE insmk = ‘X’ AND bwart NE ‘322’.

*  LOOP AT gt_mbew.

*    LOOP AT gt_mseg2 WHERE matnr = gt_mbew-matnr AND lgort = gt_mbew-lgort

*                                                 AND werks = gt_mbew-werks.

*      gt_mbew-lbkum = gt_mbew-lbkum + gt_mseg2-menge.

*    ENDLOOP.

*    MODIFY gt_mbew.

*    CLEAR gt_mbew.

*  ENDLOOP.

*

*  LOOP AT gt_mbew.

*    gt_itab-matnr = gt_mbew-matnr.

*    gt_itab-lgort = gt_mbew-lgort.

*    gt_itab-werks = gt_mbew-werks.

*    gt_itab-zsqjc = gt_mbew-lbkum + gt_mbew-speme.

*    APPEND gt_itab.

*    CLEAR gt_itab.

*  ENDLOOP.

*  DELETE gt_mseg WHERE bwart = ‘321’ AND shkzg = ‘H’.

*  DELETE gt_mseg WHERE bwart = ‘322’ AND shkzg = ‘S’.

*  LOOP AT gt_itab.

*    SELECT SINGLE qmatv INTO qmatv FROM marc WHERE matnr = gt_itab-matnr.

*    IF qmatv = ‘X’.

*      LOOP AT gt_mseg WHERE matnr = gt_itab-matnr AND lgort = gt_itab-lgort

*                          AND werks = gt_itab-werks AND shkzg = ‘S’. “and bwart <> ‘101’ and bwart <> ‘123’ and bwart <> ‘501’ .

*        gt_itab-zbqjh = gt_itab-zbqjh + gt_mseg-menge.

*      ENDLOOP.

*

*      LOOP AT gt_mseg WHERE matnr = gt_itab-matnr AND lgort = gt_itab-lgort

*                            AND werks = gt_itab-werks AND shkzg = ‘H’ .”and bwart <> ‘122’ and bwart <> ‘502’.”(‘122’)..

*        gt_itab-zbqth = gt_itab-zbqth + gt_mseg-menge.

*      ENDLOOP.

*

*    ELSE.

*      LOOP AT gt_mseg WHERE matnr = gt_itab-matnr AND lgort = gt_itab-lgort  AND werks = gt_itab-werks  AND shkzg = ‘S’..

*        gt_itab-zbqjh = gt_itab-zbqjh + gt_mseg-menge.

*      ENDLOOP.

*      LOOP AT gt_mseg WHERE matnr = gt_itab-matnr AND lgort = gt_itab-lgort

*                            AND werks = gt_itab-werks AND shkzg = ‘H’ .”(‘122’)..

*        gt_itab-zbqth = gt_itab-zbqth + gt_mseg-menge.

*      ENDLOOP.

*

*

*    ENDIF.

*

*    gt_itab-zbqjc = gt_itab-zsqjc + gt_itab-zbqjh – gt_itab-zbqth – gt_itab-bqbcs + gt_itab-bqbrs

*                    – gt_itab-cbzxf + gt_itab-cbzxt + gt_itab-zqty.

*

**    GT_ITAB-ZBQHY = GT_ITAB-ZBQTH + GT_ITAB-BQBCS + GT_ITAB-CBZXF – GT_ITAB-BQBRS – GT_ITAB-CBZXT.

*

*    SELECT SINGLE lgobe INTO gt_itab-lgobe FROM t001l WHERE lgort = gt_itab-lgort.

*

*    SELECT SINGLE meins INTO gt_itab-meins FROM mara WHERE matnr = gt_itab-matnr.

*

*    SELECT SINGLE maktx INTO gt_itab-maktx FROM makt WHERE matnr = gt_itab-matnr.

*    CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_OUTPUT’ ” 单位转换

*      EXPORTING

*        input          = gt_itab-meins

*        language       = sy-langu

*      IMPORTING

*        output         = gt_itab-meins

*      EXCEPTIONS

*        unit_not_found = 1

*        OTHERS         = 2.

*    gt_itab-reffi = ‘KAR’.

*    MODIFY gt_itab.

*    CLEAR qmatv.

*    CLEAR gt_itab.

*  ENDLOOP.

  
DELETE gt_itab 
WHERE zsqjc 


AND zbqjh 


AND zbqth 


AND zbqjc 

0
.

  
DELETE gt_itab 
WHERE lgort 
IS 
INITIAL 
.

ENDFORM
.                    
” PROCESS_DATA

*&———————————————————————*

*&      Form  WRITE_DATA

*&———————————————————————*

*       text

*———————————————————————-*

*  –>  p1        text

*  <–  p2        text

*———————————————————————-*

FORM write_data 
.

  
DATA
ws_fieldcat        
TYPE slis_t_fieldcat_alv 
WITH 
HEADER 
LINE
,

        ws_fieldgroups_tab 
TYPE slis_t_sp_group_alv
,

        ws_layout          
TYPE slis_layout_alv
,

        ws_sortfields_tab  
TYPE slis_t_sortinfo_alv 
WITH 
HEADER 
LINE
,

        ws_events          
TYPE slis_t_event
.

  
DATA
nn 
TYPE 

VALUE 
0
.

  
DATA

title 
TYPE lvc_title
.

  
DATA

color 
TYPE slis_t_specialcol_alv 
WITH 
HEADER 
LINE
.

*  SORT GT_CDHD BY BUKRS BUKRS ZEXCD.

*

  
DEFINE hout
.

    nn 
nn + 
1
.

    ws_fieldcat
col_pos       
=  nn
.

    ws_fieldcat
tabname       

‘GT_ITAB’
.

    ws_fieldcat

key           
&1
.

    ws_fieldcat
fieldname     
&2
.

    ws_fieldcat
seltext_m     
&3
.

    ws_fieldcat
cfieldname    
&4
.

    ws_fieldcat
datatype      
&5
.

    ws_fieldcat
ref_tabname   
&6
.

    ws_fieldcat
ref_fieldname 
&7
.

    ws_fieldcat
do_sum        
&8
.

    ws_fieldcat
qfieldname       
&9
.

    
APPEND ws_fieldcat
.

    
CLEAR ws_fieldcat
.

  
END-OF-DEFINITION
.

  hout
:

      
‘X’  
‘MATNR’   
‘物料号’               
”     
”      
”  
”      
”  

,

      
‘X’  
‘MAKTX’   
‘物料描述’             
”     
”      
”  
”      
”  

,

      
”   
‘MEINS’   
‘基本单位’             
”     
”      
”  
”      
”  

,

      
”   
‘ZSQJC’   
‘上期结存’             
”     
”      
”  
”      
”  
‘REFFI’
,

      
”   
‘ZBQJH’   
‘本期入库’             
”     
”      
”  
”      
”  
‘REFFI’
,

      
”   
‘ZBQTH’   
‘本期出库’             
”     
”      
”  
”      
”  
‘REFFI’
,

*      ”   ‘BQBCS’   ‘本期拨出数’           ”     ”      ”  ”      ”  ”,

*      ”   ‘BQBRS’   ‘本期拨入数’           ”     ”      ”  ”      ”  ”,

*      ”   ‘CBZXF’   ‘成本中心发料数’       ”     ”      ”  ”      ”  ”,

*      ”   ‘CBZXT’   ‘成本中心退料数’       ”     ”      ”  ”      ”  ”,

*      ”   ‘ZBQHY’   ‘本期耗用’             ”     ”      ”  ”      ”  ”,

      
”   
‘ZBQJC’   
‘本期结存’             
”     
”      
”  
”      
”  
‘REFFI’
,

      
”   
‘LGORT’   
‘库存地点’             
”     
”      
”  
”      
”  

,

      
”   
‘LGOBE’   
‘库位描述’             
”     
”      
”  
”      
”  

.

  ws_layout
zebra             

‘X’
.

  ws_layout
get_selinfos      

‘X’
.

  ws_layout
colwidth_optimize 

‘X’
.

  ws_layout
detail_popup      

‘X’
.

  
CALL 
FUNCTION 
‘REUSE_ALV_GRID_DISPLAY’

    
EXPORTING

      i_callback_program      
sy
repid

      i_callback_user_command 

‘USER_COMMAND’

      is_layout               
ws_layout

      it_fieldcat             
ws_fieldcat[]

      it_special_groups       
ws_fieldgroups_tab[]

      it_sort                 
ws_sortfields_tab[]

      it_events               
ws_events[]

      i_grid_title            

title

      i_default               

‘X’

      i_save                  

‘A’

    
TABLES

      t_outtab                
gt_itab[]

    
EXCEPTIONS

      program_error           

1

      
OTHERS                  

2
.

ENDFORM
.                    
” WRITE_DATA

*&———————————————————————*

*&      Form  USER_COMMAND

*&———————————————————————*

*       text

*———————————————————————-*

FORM user_command 
USING r_ucomm 
LIKE sy
ucomm

rs_selfield 
TYPE slis_selfield
.

  
DATA
g_selected_field_value
(
80
)
.

  
IF rs_selfield
fieldname 
EQ 
‘MATNR’
.

    
CASE r_ucomm
.

      
WHEN 
‘&IC1’
.

        
READ 
TABLE gt_itab 
INDEX  rs_selfield
tabindex
.

        
PERFORM show_detial 
USING gt_itab
matnr gt_itab
lgort

                                  gt_itab
zsqjc gt_itab
zbqjc
.
.

*        SET PARAMETER ID ‘MAT’ FIELD GT_ITAB-MATNR.

*        CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN .

    
ENDCASE
.

  
ENDIF
.

ENDFORM
.                    
“USER_COMMAND

FORM show_detial 
USING l_matnr 
LIKE mara
matnr

                        l_lgort 
LIKE mard
lgort

                        l_menge 
LIKE mseg
menge

                        l_menge1 
LIKE mseg
menge
.

  
DATA

BEGIN 
OF lt_itab 
OCCURS 
0
,

          matnr   
LIKE mara
matnr
,

          budat   
LIKE mkpf
budat
,

          werks   
LIKE mseg
werks
,

          lgort   
LIKE mseg
lgort
,

          bwart   
LIKE mseg
bwart
,

          shkzg   
LIKE mseg
shkzg
,

          menge   
LIKE mseg
menge
,

          meins   
LIKE mseg
meins
,

          smbln   
LIKE mseg
smbln
,

          smblp   
LIKE mseg
smblp
,

          mblnr   
LIKE mseg
mblnr
,

          zeile   
LIKE mseg
zeile
,

          jcsl    
LIKE mseg
menge
,

          ref_doc 
TYPE char50
,

          ref_pos 
TYPE char10
,

          ref_txt 
TYPE char50
,

          reffi   
TYPE mara
meins
,

        
END 
OF lt_itab
.

  
DATA
:l_qmatv 
LIKE marc
qmatv
.

  
DATA
:prueflos_001 
LIKE qamb
prueflos
,

       mblnr_001    
LIKE qamb
mblnr
.

  
DATA
lv_bsart 
TYPE ekko
bsart 
.

*select DISTINCT * into TABLE lt_itab from mara UP TO 50 ROWS .

  
CLEAR
:lt_itab[]
,lt_itab
,l_qmatv
.

  
SELECT 
SINGLE qmatv 
INTO l_qmatv 
FROM marc 
WHERE matnr 
l_matnr
.

  lt_itab
matnr 
l_matnr
.

  lt_itab
meins 
gt_mseg
meins
.

  lt_itab
jcsl 
l_menge
.

  
APPEND lt_itab
.
CLEAR lt_itab
.

  
“modify by  lxf start

*  IF l_qmatv = ‘X’.

*    LOOP AT gt_mseg WHERE matnr = l_matnr AND lgort = l_lgort AND bwart <> ‘101’  AND bwart <> ‘501’ .

**      lt_itab = gt_mseg.

*      MOVE-CORRESPONDING gt_mseg TO lt_itab.

*      APPEND lt_itab.CLEAR lt_itab.

*    ENDLOOP.

*

*    LOOP AT gt_mseg WHERE matnr = l_matnr AND lgort = l_lgort AND bwart EQ ‘101’  AND bwart <> ‘501’ .

*      CLEAR lv_bsart .

*      SELECT SINGLE bsart INTO lv_bsart

*        FROM ekko AS a

*        JOIN mseg AS b

*        ON a~ebeln = b~ebeln

*        WHERE   b~mblnr = gt_mseg-mblnr

*        AND a~bsart EQ ‘ZUB’ .

*      IF lv_bsart IS NOT INITIAL .

*        MOVE-CORRESPONDING gt_mseg TO lt_itab.

*      ENDIF .

*      APPEND lt_itab.CLEAR lt_itab.

*    ENDLOOP.

*

*  ELSE.

*    LOOP AT gt_mseg WHERE matnr = l_matnr AND lgort = l_lgort.” and bwart <> ‘101’.

**      lt_itab = gt_mseg.

*      MOVE-CORRESPONDING gt_mseg TO lt_itab.

*      APPEND lt_itab.CLEAR lt_itab.

*    ENDLOOP.

*  ENDIF.

  
“modify by  lxf end

  
LOOP 
AT gt_mseg 
WHERE matnr 
l_matnr 
AND lgort 
l_lgort
.

    
MOVE-CORRESPONDING gt_mseg 
TO lt_itab
.

    
APPEND lt_itab
.
CLEAR lt_itab
.

  
ENDLOOP
.

  
LOOP 
AT lt_itab
.

    
IF lt_itab
bwart 

‘321’
.

      
SELECT 
SINGLE prueflos

        
INTO prueflos_001

        
FROM qamb

        
WHERE mblnr 
lt_itab
mblnr

        
AND   typ 

‘3’
.

      
IF prueflos_001 
IS 
NOT 
INITIAL
.

        
SELECT 
SINGLE mblnr zeile

          
INTO 
(lt_itab
ref_doc
,lt_itab
ref_pos
)

          
FROM qamb

          
WHERE prueflos 
prueflos_001

          
AND   typ 

‘1’
.

      
ENDIF
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘201’

    
OR lt_itab
bwart 

‘202’

    
OR lt_itab
bwart 

‘311’

    
OR lt_itab
bwart 

‘312’

    
OR lt_itab
bwart 

‘Z61’

    
OR lt_itab
bwart 

‘Z62’
.

      
SELECT 
SINGLE rsnum rspos

        
INTO 
(lt_itab
ref_doc
,lt_itab
ref_pos
)

        
FROM mseg

        
WHERE mblnr 
lt_itab
mblnr

        
AND   zeile 
lt_itab
zeile
.

      
IF lt_itab
bwart 

‘312’       
.

        
SELECT 
SINGLE bktxt

          
INTO lt_itab
ref_txt

          
FROM mkpf

          
WHERE mblnr 
lt_itab
mblnr
.

      
ENDIF
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘122’ 
OR lt_itab
bwart 

‘309’
.          
“增加122、309移动类型参考凭证

      
SELECT 
SINGLE bktxt

                
INTO lt_itab
ref_txt

                
FROM mkpf

                
WHERE mblnr 
lt_itab
mblnr
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘261’

    
OR lt_itab
bwart 

‘262’
.

      
SELECT 
SINGLE aufnr

        
INTO lt_itab
ref_doc

        
FROM mseg

        
WHERE mblnr 
lt_itab
mblnr

        
AND   zeile 
lt_itab
zeile
.

      
SELECT 
SINGLE bktxt

            
INTO lt_itab
ref_txt

            
FROM mkpf

            
WHERE mblnr 
lt_itab
mblnr
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘511’

    
OR lt_itab
bwart 

‘531’

    
OR lt_itab
bwart 

‘541’

    
OR lt_itab
bwart 

‘542’

    
OR lt_itab
bwart 

‘551’
.

      
SELECT 
SINGLE bktxt

            
INTO lt_itab
ref_txt

            
FROM mkpf

            
WHERE mblnr 
lt_itab
mblnr
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘601’

    
OR lt_itab
bwart 

‘631’

    
OR lt_itab
bwart 

‘653’

    
OR lt_itab
bwart 

‘Z81’

    
OR lt_itab
bwart 

‘Z91’
.

      
SELECT 
SINGLE xblnr

            
INTO lt_itab
ref_doc

            
FROM mkpf

            
WHERE mblnr 
lt_itab
mblnr
.

    
ENDIF
.

    
IF lt_itab
bwart 

‘701’

    
OR lt_itab
bwart 

‘702’
.

      
SELECT 
SINGLE iblnr zeili

            
INTO 
(lt_itab
ref_doc
,lt_itab
ref_pos
)

            
FROM iseg

            
WHERE mblnr 
lt_itab
mblnr

            
AND   zeile 
lt_itab
zeile
.

    
ENDIF
.

    
SELECT 
SINGLE budat 
INTO lt_itab
budat 
FROM mkpf 
WHERE mblnr 
lt_itab
mblnr
.
” AND ZEILE = LT_ITAB-ZEILE.

    lt_itab
reffi 

‘KAR’
.

    
IF lt_itab
shkzg 

‘H’
.

      lt_itab
menge 
lt_itab
menge  * 



)
.

    
ENDIF
.

    
IF  lt_itab
bwart 

‘161’

       
OR lt_itab
bwart 

‘122’

       
OR lt_itab
bwart 

‘351’

       
OR lt_itab
bwart 

‘101’ 
.

      
SELECT 
SINGLE bktxt

          
INTO lt_itab
ref_txt

          
FROM mkpf

          
WHERE mblnr 
lt_itab
mblnr
.

    
ENDIF 
.

    
MODIFY lt_itab
.
CLEAR lt_itab
.

  
ENDLOOP
.

  
SORT lt_itab 
BY budat mblnr zeile 
.

  lt_itab
matnr 
l_matnr
.

  lt_itab
jcsl 
l_menge1
.

  lt_itab
reffi 

‘KAR’
.

  
APPEND lt_itab
.
CLEAR lt_itab
.

  
DATA
:last_menge 
TYPE menge_d
.

  
DATA
:
line 
TYPE 
i
.

  
DESCRIBE 
TABLE lt_itab 
LINES 
line
.

  
LOOP 
AT lt_itab
.

    
IF sy
tabix > 

AND sy
tabix <> 
line
.

      lt_itab
jcsl 
last_menge + lt_itab
menge
.

    
ENDIF
.

    last_menge 
lt_itab
jcsl
.

    
MODIFY lt_itab
.
CLEAR lt_itab
.

  
ENDLOOP
.

  
DATA
lt_fcat 
TYPE slis_t_fieldcat_alv
,

        ls_fcat 
TYPE slis_fieldcat_alv
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘MATNR’
.

  ls_fcat
seltext_l 

‘物料’
.

  ls_fcat
outputlen 

18
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘BUDAT’
.

  ls_fcat
seltext_l 

‘过账日期’
.

  ls_fcat
outputlen 

10
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘MBLNR’
.

  ls_fcat
seltext_l 

‘物料凭证’
.

  ls_fcat
outputlen 

10
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘ZEILE’
.

  ls_fcat
seltext_l 

‘行项目’
.

  ls_fcat
outputlen 

6
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘BWART’
.

  ls_fcat
seltext_l 

‘移动类型’
.

*  ls_fcat-outputlen = 10.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘MENGE’
.

  ls_fcat
seltext_l 

‘数量’
.

  ls_fcat
qfieldname 

‘REFFI’
.

  ls_fcat
outputlen 

13
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘JCSL’
.

  ls_fcat
seltext_l 

‘结存数量’
.

  ls_fcat
ref_tabname  

‘MSEG’
.

  ls_fcat
ref_fieldname 

‘MENGE’
.

  ls_fcat
qfieldname 

‘REFFI’
.

  ls_fcat
outputlen 

13
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘REF_DOC’
.

  ls_fcat
seltext_l 

‘参考凭证’
.

  ls_fcat
outputlen 

20
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘REF_POS’
.

  ls_fcat
seltext_l 

‘参考行项目’
.

  ls_fcat
outputlen 

10
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CLEAR ls_fcat
.

  ls_fcat
fieldname 

‘REF_TXT’
.

  ls_fcat
seltext_l 

‘抬头文本’
.

  ls_fcat
outputlen 

50
.

  
APPEND ls_fcat 
TO lt_fcat
.

  
CALL 
FUNCTION 
‘REUSE_ALV_POPUP_TO_SELECT’

    
EXPORTING

      i_screen_start_column 

7                                       
“ALV起始位置

      i_screen_start_line   

7

      i_screen_end_column   

173

      i_screen_end_line     

30

      i_title               

‘本期发生明细’  
“这里设置alv标题

      i_tabname             
space    
“这里默认是空就OK了

      it_fieldcat           
lt_fcat[]  
“这里是字段目录

      i_callback_program    
sy
repid

    
TABLES

      t_outtab              
lt_itab[]  
“输出内表.

    
EXCEPTIONS

      program_error         

1

      
OTHERS                

2
.

ENDFORM
.

    原文作者:IT养家
    原文地址: https://blog.csdn.net/ityangjia/article/details/80495112
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞