REPORT ymmr0109 MESSAGE-ID ymm NO STANDARD PAGE HEADING
LINE-SIZE 110
LINE-COUNT 29(3).
TABLES: mseg,
mkpf,
makt,
t001l,
m_kosts,
marc,
tlogt,
usr21,
adrp,
mara,
kna1,
user_addr.
TABLES:sscrfields.
DATA: count TYPE i VALUE 0, "记录循环的次数
count1 TYPE i VALUE 10, "要写空行的行数
ycount TYPE i VALUE 0, "对循环次数求余的值
zcount TYPE i VALUE 0, "总的记录数
usrname(10) TYPE c,
yzcount TYPE i VALUE 0, "总记录数求余的值
heardcount TYPE i VALUE 0, "排版标记
cmenge(13) TYPE c.
****** 放主要数据的内表*****
TYPES:BEGIN OF itab,
lgort LIKE mseg-lgort, "仓库
loggr LIKE marc-loggr,
ltext LIKE tlogt-ltext, "后勤处理组描述
bwart LIKE mseg-bwart, "移动类型
xauto LIKE mseg-xauto,
mblnr LIKE mseg-mblnr, "凭证号
kostl LIKE mseg-kostl, "成本中心
matnr LIKE mseg-matnr, "物料号
erfmg LIKE mseg-erfmg, "数量
erfme LIKE mseg-erfme, "单位
werks LIKE mseg-werks,
kunnr LIKE mseg-kunnr,
sakto LIKE mseg-sakto, "科目
wempf LIKE kna1-kunnr, "送达方
budat LIKE mkpf-budat, "出库日期
bktxt LIKE mkpf-bktxt, "备注
maktx LIKE makt-maktx, "物料描述
lgobe LIKE t001l-lgobe, "仓库描述
mctxt LIKE m_kosts-mctxt, "成本 中心描述
name1 LIKE kna1-name1,
name2 LIKE kna1-name2,
bismt LIKE mara-bismt,
ltex LIKE kna1-stras, " 街道
ktex LIKE cskt-ktext, " 成本中心
bstkd LIKE vbkd-bstkd, " 客户采购订单号
txt20 LIKE skat-txt20,"科目描述
END OF itab.
DATA itab1 TYPE itab OCCURS 0 WITH HEADER LINE.
*****定义结束******
*****放出库日期的内表*****
DATA:BEGIN OF itab_user OCCURS 0,
usnam LIKE mkpf-usnam,
name_first LIKE adrp-name_first, "创建者的名
name_last LIKE adrp-name_last, "创建者的姓
END OF itab_user.
*{ INSERT PRDK900071 1
DATA: werks TYPE mseg-werks,
lgort TYPE mseg-lgort.
*} INSERT
DATA: apage TYPE i,
fipage TYPE f,
ipage1 TYPE i VALUE '0',
ipage2 TYPE i VALUE '0',
cpage(2) TYPE c.
DATA name TYPE t001-butxt.
PARAMETERS: cx TYPE c NO-DISPLAY. "add V.0冲销
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE t1.
SELECT-OPTIONS:p_bwart FOR mseg-bwart NO-DISPLAY.
PARAMETERS: p_mblnr LIKE mseg-mblnr . "mod V.0
*PARAMETERS: cx TYPE c NO-DISPLAY."冲销
SELECTION-SCREEN END OF BLOCK a.
INITIALIZATION.
AUTHORITY-CHECK OBJECT 'YREPORT'
ID 'BUKRS' FIELD 'HL01'
ID 'WERKS' FIELD 'LN01'.
IF sy-subrc NE 0.
MESSAGE e005(ymess) WITH 'No Authorization!'.
ENDIF.
AT SELECTION-SCREEN.
PERFORM data_check USING p_mblnr.
AT SELECTION-SCREEN OUTPUT.
GET PARAMETER ID 'MBN' FIELD p_mblnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_mblnr.
* DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.CLEAR: dynpfields, dynpfields[].
* dynpfields-fieldname = 'P_BWART'."需要读值的字段名
* APPEND dynpfields.
*
* CALL FUNCTION 'DYNP_VALUES_READ'
* EXPORTING
* dyname = sy-repid
* dynumb = sy-dynnr
* translate_to_upper = 'X'
* TABLES
* dynpfields = dynpfields
* EXCEPTIONS
* OTHERS = 9.
* IF sy-subrc = 0.
* READ TABLE dynpfields WITH KEY fieldname = 'P_BWART'.
* p_bwart = dynpfields-fieldvalue. "备注
* ENDIF.
DATA: flag(1).
flag = 'X'.
EXPORT flag TO MEMORY ID 'MB51_FLAG'.
CALL TRANSACTION 'MB51'.
GET PARAMETER ID 'MBN' FIELD p_mblnr.
START-OF-SELECTION .
PERFORM get_data.
END-OF-SELECTION.
PERFORM write_data .
TOP-OF-PAGE.
PERFORM write_list.
END-OF-PAGE.
PERFORM write_footer.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* 读取mseg表的数据
*----------------------------------------------------------------------*
FORM get_data.
REFRESH itab1.
* CLEAR cx.
*****读mseg表的内容,放到itab1里*****
SELECT bwart xauto mblnr lgort kostl matnr erfmg erfme werks kunnr sakto wempf
INTO (itab1-bwart,itab1-xauto,itab1-mblnr,itab1-lgort,itab1-kostl,itab1-matnr,
itab1-erfmg,itab1-erfme,itab1-werks,itab1-kunnr,itab1-sakto,itab1-wempf)
FROM mseg
WHERE mblnr = p_mblnr
AND bwart IN p_bwart
.
*} REPLACE
APPEND itab1.
CLEAR itab1.
ENDSELECT.
DELETE itab1 WHERE xauto = 'X'.
SELECT usnam FROM mkpf INTO TABLE itab_user WHERE mblnr = p_mblnr.
LOOP AT itab_user.
SELECT SINGLE name_first name_last
FROM adrp
INNER JOIN usr21 ON usr21~persnumber = adrp~persnumber
INTO (itab_user-name_first,itab_user-name_last)
WHERE bname = itab_user-usnam.
ENDLOOP.
CONCATENATE itab_user-name_last itab_user-name_first INTO usrname.
LOOP AT itab1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = itab1-wempf
IMPORTING
output = itab1-wempf.
SELECT SINGLE butxt INTO name FROM t001 WHERE bukrs = 'HL01'. "取公司名称lkj
SELECT SINGLE maktx FROM makt INTO itab1-maktx WHERE matnr = itab1-matnr.
SELECT SINGLE budat bktxt FROM mkpf INTO (itab1-budat,itab1-bktxt) WHERE mblnr = itab1-mblnr.
SELECT SINGLE lgobe FROM t001l INTO itab1-lgobe WHERE lgort = itab1-lgort AND werks = itab1-werks.
SELECT SINGLE mctxt FROM m_kosts INTO itab1-mctxt WHERE kostl = itab1-kostl.
SELECT SINGLE loggr FROM marc INTO itab1-loggr WHERE matnr = itab1-matnr AND werks = itab1-werks.
SELECT SINGLE ltext FROM tlogt INTO itab1-ltext WHERE loggr = itab1-loggr.
SELECT SINGLE bismt FROM mara INTO itab1-bismt WHERE matnr = itab1-matnr.
* IF p_bwart = 'Z09'.
* SELECT SINGLE name1 FROM kna1 INTO itab1-name1 WHERE kunnr = itab1-wempf.
* ENDIF.
* IF p_bwart = 'Z11' .
* SELECT SINGLE name1 FROM kna1 INTO itab1-name2 WHERE kunnr = itab1-kunnr.
* ENDIF.
* IF p_bwart = 'Z20'.
SELECT SINGLE name1 FROM kna1 INTO itab1-name2 WHERE kunnr = itab1-kunnr.
SELECT SINGLE stras FROM kna1 INTO itab1-ltex WHERE kunnr = itab1-kunnr.
SELECT SINGLE ktext FROM cskt INTO itab1-ktex WHERE kostl = itab1-kostl AND spras = '1'.
SELECT SINGLE txt20 FROM skat INTO itab1-txt20 WHERE KTOPL = 'HL00' and spras = '1' AND saknr = itab1-sakto.
SELECT SINGLE vb~bstkd
INTO itab1-bstkd
FROM lips AS li INNER JOIN vbkd AS vb ON vb~vbeln = li~vgbel
INNER JOIN mkpf AS mk ON mk~le_vbeln = li~vbeln
WHERE mk~mblnr = itab1-mblnr.
* ENDIF.
*-------------------V1.0-------------------------*
* IF itab1-bwart = 'Z21' OR itab1-bwart = 'Z23' OR itab1-bwart = 'Z25'.
* cx = 'X' .
* ENDIF.
MODIFY itab1.
CLEAR itab1.
ENDLOOP.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form write_data
*&---------------------------------------------------------------------*
* 将数据显示出来
*----------------------------------------------------------------------*
FORM write_data .
SORT itab1 BY lgort loggr.
LOOP AT itab1.
apage = apage + 1.
AT END OF loggr.
fipage = CEIL( apage / 8 ).
ipage1 = fipage.
ipage2 = ipage2 + ipage1.
apage = 0.
fipage = 0.
ipage1 = 0.
ENDAT.
ENDLOOP.
cpage = ipage2.
LOOP AT itab1.
cmenge = ABS( itab1-erfmg ).
* AT NEW loggr.
*
*
* ENDAT.
WRITE :
/'|' NO-GAP, (12) itab1-matnr LEFT-JUSTIFIED NO-GAP,
'|' NO-GAP, (38) itab1-maktx LEFT-JUSTIFIED NO-GAP,
'|' NO-GAP, (4) itab1-erfme CENTERED NO-GAP,
'|' NO-GAP, (10) cmenge RIGHT-JUSTIFIED NO-GAP,
'|' NO-GAP, (8) itab1-bwart CENTERED NO-GAP,
'|' NO-GAP, (14) itab1-bismt CENTERED NO-GAP,
'|' NO-GAP,(2) '' .
ULINE AT /(93).
count = count + 1.
ycount = count MOD 8 .
count1 = 8 - ycount.
AT END OF loggr.
IF count1 <> 8.
DO count1 TIMES.
WRITE :
/'|' NO-GAP, (12) '' NO-GAP,
'|' NO-GAP, (38) '' NO-GAP,
'|' NO-GAP, (4) '' NO-GAP,
'|' NO-GAP, (10) '' NO-GAP,
'|' NO-GAP, (8) '' NO-GAP,
'|' NO-GAP, (14) '' NO-GAP,
'|' NO-GAP,(2) '' .
ULINE AT /(93).
ENDDO.
NEW-PAGE.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. "write_data
*&---------------------------------------------------------------------*
*& Form write_list
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_list.
*if heardcount = 0.
*heardcount = 1.
DATA ctext(30) TYPE c.
WRITE /(93) name CENTERED.
*------------------BEGIN ADD V1.0------------------*
IF cx = 'X'.
WRITE /(93) '其他入库单' CENTERED.
ELSE.
WRITE /(93) '其他出库单' CENTERED.
ENDIF .
*-----------------END ADD 1.0----------------------*
* ENDCASE.
ctext = itab1-ltext.
WRITE: /,/3 '出库单号:', itab1-mblnr ,57 '出库日期 :',itab1-budat,
/3 '出库仓库:', itab1-lgobe,57 '后勤处理组:',ctext.
WRITE: /3 '客 户:',itab1-kunnr,22 itab1-name2,57 '成本中心 :',itab1-kostl ,76 itab1-ktex.
WRITE: /3 '科 目:',itab1-sakto,22 itab1-txt20 ,57 '备 注 : ',itab1-bstkd .
ULINE AT /(93).
WRITE :
/'|' NO-GAP, (12) '物料编码' CENTERED NO-GAP,
'|' NO-GAP, (38) '物料描述' CENTERED NO-GAP,
'|' NO-GAP, (4) '单位' NO-GAP,
'|' NO-GAP, (10) '数量' CENTERED NO-GAP,
'|' NO-GAP, (8) '移动类型' CENTERED NO-GAP,
'|' NO-GAP, (14) '备注' CENTERED NO-GAP,
'|' NO-GAP,(2) '' .
ULINE AT /(93).
*else.
*heardcount = 0.
*endif.
ENDFORM. "write_list
*&---------------------------------------------------------------------*
*& Form write_footer
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM data_check USING value(v_mblnr) TYPE mseg-mblnr.
IF sscrfields-ucomm <> 'BUT1'.
*{ REPLACE PRDK900071 1
*/ SELECT * FROM mseg WHERE mblnr = v_mblnr AND bwart = P_BWART .
**=------------V1.0----------------
SELECT SINGLE werks lgort FROM mseg INTO (werks,lgort) WHERE mblnr = v_mblnr AND bwart IN p_bwart .
*} REPLACE
* ENDSELECT.
IF sy-subrc <> 0 .
MESSAGE e999 WITH '你输的凭证号或移动类型不正确'.
ENDIF.
ENDIF.
ENDFORM. "data_che ck
*&---------------------------------------------------------------------*
*& Form write_footer
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_footer.
*ULINE AT /(93).
count = 0.
WRITE:
/5 '输单员:', usrname,28 '仓管员:',55 '收货人:',77 sy-pagno,'/',cpage.
SKIP.
WRITE:/5 '仓库主管:'.
ENDFORM. "write_footer
*{ INSERT PRDK900071 1
FORM author_check.
AUTHORITY-CHECK OBJECT 'YHW'
* ID 'ACTVT' FIELD '*'
ID 'WERKS' FIELD werks
ID 'LGORT' FIELD lgort.
IF sy-subrc NE 0 .
MESSAGE e999 WITH '你无权打印该凭证号'.
ENDIF.
ENDFORM. "author_check
*} INSERT