MM 出库单打印程序

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值