现在的位置: 首页 > 综合 > 正文

PO Print

2013年10月03日 ⁄ 综合 ⁄ 共 9925字 ⁄ 字号 评论关闭


REPORT  ZPO_test LINE-SIZE 255.

TABLES : EKPO.
TABLES : EKET.
TABLES : EKKO.
TABLES : LFA1.
TABLES : KNVK.
TABLES : NAST.
TABLES:T006.

PARAMETER P_SMART TYPE TDSFNAME DEFAULT 'ZDEMO_POTEST2_STRUCTURE'.   "这个改了!!
DATA: ITPO TYPE TABLE OF ZDEMO_POTEST2_STRUCTURE INITIAL SIZE 0,
      WA_PO TYPE ZDEMO_POTEST2_STRUCTURE.
DATA: SEL2 TYPE I.
DATA:MONTH TYPE MONTH.
DATA:IT_247 LIKE T247.
DATA:MAT TYPE CHAR200.

DATA:mony TYPE p decimals 2.

DATA:mony2 TYPE CHAR200.
DATA:mony3 TYPE CHAR200.
DATA:baizhutou TYPE CHAR300.
DATA: it_tline LIKE tline OCCURS 0 WITH HEADER LINE,
      vl_name LIKE thead-tdname,
      v_tdid like STXH-TDID.
      DATA:T1 TYPE CHAR200.

SELECTION-SCREENBEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.

PARAMETERS:  PONO LIKE  EKPO-EBELN.  "采购订单号
SELECTION-SCREENEND OF BLOCK 1.

START-OF-SELECTION.
  PERFORM DATA_RETRIEVAL USING PONO.
  PERFORM PRINT_OUT USING P_SMART.

*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL USING PONO.
  CLEAR SEL2.
*CLEAR FIELSD
* Start of Looping
  SELECT EKPO~EBELN EKPO~MATNR EKPO~TXZ01 EKPO~MENGE EKPO~NETPR EKPO~WERKS EKPO~MEINS EKPO~EBELP
         EKPO~BRTWR EKPO~PRDAT EKPO~WERKS EKPO~LOEKZ EKET~EINDT EKET~EBELP  ekpo~MWSKZ ekpo~bukrs
  FROM EKPO
  INNER JOIN EKET
  ON EKPO~EBELN = EKET~EBELN AND
     EKPO~EBELP = EKET~EBELP
* INNER JOIN EKKO ON EKPO~EBELN = EKKO~EBELN
* INNER JOIN LFA1 ON LFA1~LIFNR = EKKO~LIFNR
*  INNER JOIN T006 ON EKPO~MEINS = T006~MSEHI
*  INNER JOIN T006J ON T006J~ISOCODE = T006~ISOCODE
  INTO CORRESPONDING FIELDS OF WA_PO
    WHERE EKPO~EBELN = PONO AND
          EKPO~LOEKZ <> 'L'.           " DW20090122 已刪除的不選
* AND EKPO~LOEKZ <> 'L'.
* AND T006J~LANGU = 1.

  if sy-subrc = 0.
    sel2 = sel2 + 1.                   " DW20090122 行號加一
    wa_po-sel = sel2.
  endif.

  IF WA_PO-LIFNR IS NOT INITIAL.
    SELECT SINGLE NAMEV INTO WA_PO-NAMEV FROM KNVK WHERE LIFNR = WA_PO-LIFNR.
*        SELECT SINGLE VTEXT INTO WA_ZQT-VTEXT_EN FROM TVZBT WHERE ZTERM = WA_ZQT-ZTERM AND SPRAS = 'E'.
*  WERKS工厂代码
  ENDIF.

  if WA_PO-MEINS is not initial.
    SELECT SINGLE T006A~MSEHL INTO WA_PO-MSEHL
      from T006A
      WHERE  T006A~MSEHI = WA_PO-MEINS.
  endif.

*  IF WA_PO-MEINS IS NOT INITIAL.
*      SELECT SINGLE ISOTXT INTO WA_PO-ISOTXT FROM T006J WHERE ISOCODE = WA_PO-ISOCODE and LANGU = 'ZH'.
*  ENDIF.

  IF WA_PO-WERKS IS NOT INITIAL.
    SELECT SINGLE ORT01 STRAS   INTO CORRESPONDING FIELDS OF WA_PO FROM T001W WHERE WERKS = WA_PO-WERKS.
  ENDIF.
*
  IF WA_PO-EBELN IS NOT INITIAL.
    SELECT SINGLE LFA1~LIFNR WAERS NAME1 TELFX INTO CORRESPONDING FIELDS OF WA_PO
      FROM EKKO
      INNER JOIN LFA1 ON LFA1~LIFNR = EKKO~LIFNR
      WHERE EKKO~EBELN = WA_PO-EBELN.
  ENDIF.

* 选出税码
  if wa_po-MWSKZ is not initial.
    select single KBETR KONWA INTO CORRESPONDING FIELDS OF WA_PO
      from konp
      inner join a003 on a003~KNUMH = konp~KNUMH
      where a003~ALAND = 'CN' and a003~MWSKZ =  wa_po-MWSKZ.
   endif.

*计算总金额
   wa_po-je = ( 1 + wa_po-KBETR / 1000 ) * wa_po-BRTWR.

*将总额转为字符型
   WRITE wa_po-je TO wa_po-je_C.
   SHIFT wa_po-je_C LEFT DELETING LEADING SPACE.

*计算单价
   WA_PO-DJ = WA_PO-JE / WA_PO-MENGE.

    WRITE WA_PO-DJ TO WA_PO-DJ_C.
    SHIFT WA_PO-DJ_C LEFT DELETING LEADING SPACE.

    CONCATENATE  WA_PO-ORT01 WA_PO-STRAS INTO WA_PO-INCPLACE."将城市与地址合成一个

    WRITE WA_PO-MENGE TO WA_PO-MENGE_C.
    SHIFT WA_PO-MENGE_C LEFT DELETING LEADING SPACE.

    WRITE WA_PO-NETPR TO WA_PO-NETPR_C.
    SHIFT WA_PO-NETPR_C LEFT DELETING LEADING SPACE.

    WRITE WA_PO-BRTWR TO WA_PO-BRTWR_C.
    SHIFT WA_PO-BRTWR_C LEFT DELETING LEADING SPACE.
    mony =  WA_PO-JE + mony.

* Read Text
    PERFORM GET_TEXT USING 'F01' SY-LANGU 'EKKO' WA_PO-EBELN WA_PO-EBELP -1
      CHANGING WA_PO-BEIZHU.

    PERFORM GET_TEXT USING 'PRUE' SY-LANGU 'MATERIAL' WA_PO-MATNR SPACE -1 "将数据传入
      CHANGING WA_PO-BEIZHU2.
*带出备注头
*    PERFORM GET_TEXT USING 'F01' SY-LANGU 'EKKO' WA_PO-EBELN WA_PO-EBELP -1
*    CHANGING WA_PO-EBELN WA_PO-EBELP WA_PO-BEIZHU.
* MAT是将备注放在一行里

    IF WA_PO-BEIZHU2 IS  NOT INITIAL.
      CONCATENATE MAT WA_PO-BEIZHU2 INTO MAT SEPARATED  BY '、'.
    ENDIF.

  vl_name = WA_PO-EBELN.
  CLEAR V_TDID.
   SELECT SINGLE TDID FROM STXH
     INTO V_TDID
     WHERE TDOBJECT = 'EKKO'
       AND TDNAME = VL_NAME
       AND TDSPRAS = '1'.
       CALL FUNCTION 'READ_TEXT'
          EXPORTING
            client                        = sy-mandt
             id                           = V_TDID
            language                     = '1'
            name                        = vl_name  " PUCHASING ORDER
            object                        = 'EKKO' "'EKKO'
          TABLES
            lines                         = it_tline
         EXCEPTIONS
           id                            = 1
           language                      = 2
           name                          = 3
           not_found                     = 4
           object                        = 5
           reference_check               = 6
           wrong_access_to_archive       = 7
           OTHERS                        = 8
                  .
  CLEAR: T1.
    loop at it_tline.
      CONCATENATE T1 it_tline INTO T1.
    endloop.

* DW20090122  所有字段準備好才APPEND 到 Internal Table
  APPEND WA_PO TO ITPO.

  ENDSELECT.

   mony2 =  mony.
  SHIFT mony2 LEFT DELETING LEADING SPACE.
  mony3 = mony2.

*出现8行,序号出现到8.

  DATA: V_X TYPE I VALUE 1.
  DO 8 TIMES.
   READ TABLE ITPO INDEX V_X INTO WA_PO.
   IF SY-SUBRC <> 0"不等于0是不成功的意思,当读不成功时,则向下走加1.
     CLEAR WA_PO.
      WA_PO-SEL = V_X.
      APPEND WA_PO TO ITPO.
*    modify table itpo from wa_po.
    ENDIF.
    V_X = V_X + 1.
  ENDDO.

ENDFORM.                    "DATA_RETRIEVAL

*取行备注值
FORM GET_TEXT  USING    ID       LIKE  THEAD-TDID
                        LANGUAGE LIKE  THEAD-TDSPRAS
                        OBJECT   LIKE  THEAD-TDOBJECT
                        EBELN
                        EBELP
                        NO_OF_LINES TYPE I
               CHANGING P_ALL.

  DATA : ITEXT LIKE TLINE OCCURS 0 WITH HEADER LINE.
  DATA : TEXTNAME LIKE STXH-TDNAME.
  DATA : TEMPCNTR TYPE I.

  CLEAR: P_ALL.
  IF EBELP EQ '000000' OR EBELP EQ SPACE.
    TEXTNAME = EBELN.
  ELSE.
    CONCATENATE EBELN EBELP INTO TEXTNAME.
  ENDIF.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      ID                      = ID
      LANGUAGE                = SY-LANGU
      NAME                    = TEXTNAME
      OBJECT                  = OBJECT
    TABLES
      LINES                   = ITEXT
    EXCEPTIONS
      ID                      = 1
      LANGUAGE                = 2
      NAME                    = 3
      NOT_FOUND               = 4
      OBJECT                  = 5
      REFERENCE_CHECK         = 6
      WRONG_ACCESS_TO_ARCHIVE = 7
      OTHERS                  = 8.

  IF SY-SUBRC <> 0.
    CLEAR ITEXT.
    EXIT.
  ENDIF.

  DATA LT_TEXT TYPE TDTAB_C132.
  DATA WA_TEXT LIKE LINE OF LT_TEXT.
  CALL FUNCTION 'CONVERT_ITF_TO_ASCII'
    EXPORTING
      FORMATWIDTH       = 128
    IMPORTING
      C_DATATAB         = LT_TEXT
    TABLES
      ITF_LINES         = ITEXT
    EXCEPTIONS
      INVALID_TABLETYPE = 1
      OTHERS            = 2.

  LOOP AT LT_TEXT INTO WA_TEXT.
    IF WA_TEXT IS NOT INITIAL.
      CONCATENATE P_ALL WA_TEXT INTO P_ALL.
    ENDIF.
*    TEMPCNTR = TEMPCNTR + 1.
*    CONCATENATE P_ALL WA_TEXT INTO P_ALL SEPARATED BY SPACE.
  ENDLOOP.
  SHIFT P_ALL LEFT DELETING LEADING SPACE.
ENDFORM.                    " GET_TEXT

*以上是取行备注值

FORM PRINT_OUT USING FRM_NAME TYPE C.
  DATA: LF_FM_NAME            TYPE RS38L_FNAM,
        CONTROL               TYPE SSFCTRLOP,
        LF_FORMNAME           TYPE TDSFNAME.

  LF_FORMNAME = P_SMART.

   LF_FM_NAME = ''.

* 根據Smart Form 名稱, 找出对应的 function Module name
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = FRM_NAME
    IMPORTING
      FM_NAME            = LF_FM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
* 错误处理
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.

* 设定预览參数
  CONTROL-NO_DIALOG = 'X'.
  CONTROL-PREVIEW   = 'X'.
  CONTROL-NO_OPEN   = 'X'.
  CONTROL-NO_CLOSE  = 'X'.

* 预览开始
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      CONTROL_PARAMETERS = CONTROL
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.

* 错误处理
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.

  READ TABLE ITPO INTO WA_PO WITH KEY EBELN = PONO."-LOW ."修改了.
* 呼叫Smart Form 产生的 Function Module
  CALL FUNCTION LF_FM_NAME
       EXPORTING
         CONTROL_PARAMETERS   = CONTROL
         MAT = MAT
         T1 = T1
         mony3 = mony3
         WA_PO              = WA_PO    "将ZDEMO_H改为ZQQ
*         x1 = X1
*         NAME1 = X2

       TABLES
         ITPO          = ITPO  "改为ZLFTABLE
         EXCEPTIONS
         FORMATTING_ERROR     = 1
         INTERNAL_ERROR       = 2
         SEND_ERROR           = 3
         USER_CANCELED        = 4
         OTHERS               = 5.

*  错误处理
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* 显示预览
  CALL FUNCTION 'SSF_CLOSE'
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.

* 错误处理
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " print_out

*loop at ITPO.
*以下是用于与单据联接的

*---------------------------------------------------------------------*
*       FORM ENTRY
*---------------------------------------------------------------------*
FORM ENTRY USING RETURN_CODE US_SCREEN.

  PERFORM DATA_RETRIEVAL USING NAST-OBJKY.
  PERFORM PRINT_OUT USING 'ZDEMO_POTEST2_STRUCTURE'.

ENDFORM.                    "ENTRY

抱歉!评论已关闭.