SAP-MM采购订单SMARTFORMS 打印

REPORT ZMMD001.

TYPE-POOLS: SLIS. "ALV显示使用到的贡献池

TABLES:EKKO,EKPO,LFA1.  "引用这两个表的数据

INCLUDE Z_EXCEL.

************************************************************************
* ALV数据定义
************************************************************************
TYPE-POOLS:SLIS.
DATA: GS_GRID     TYPE REF TO CL_GUI_ALV_GRID,
      GT_FIELDCAT TYPE        LVC_T_FCAT,
      GS_LAYOUT   TYPE        LVC_S_LAYO,
      GV_I        TYPE        I,
      GV_REPID    TYPE        SY-REPID VALUE SY-REPID.
*---------------------------------------------------------------------*
* 結構聲明
*---------------------------------------------------------------------*
TYPES: BEGIN OF STUR_DJFTAB ,

         SEL_BOX          TYPE  CHAR1,              "创建名为SEL_BOX  引用CHAR1类型

         EBELP            TYPE EKPO-EBELP,        "项目号
         EBELN            TYPE EKPO-EBELN,        "订单号
         WERKS            TYPE EKPO-WERKS,        "工厂
         EKGRP            TYPE EKKO-EKGRP,        "采购组
         MATKL            TYPE EKPO-MATKL,        "物料组
         LIFNR            TYPE LFA1-LIFNR,        "供应商
         BEDAT            TYPE EKKO-BEDAT,        "订单日期
         B                TYPE T001W-NAME1,       "需方
         C                TYPE LFA1-NAME1,        "供方
         A_NAME2          TYPE LFA1-NAME2,        "供方联系人
         D                TYPE T001W-STRAS,       "需方送货地址
         F                TYPE LFA1-STRAS,        "供方送货地址
         TELF1            TYPE LFA1-TELF1,        "供方电话
         TELFX            TYPE LFA1-TELFX,        "供方传真
         WAERS            TYPE EKKO-WAERS,        "币种
         INCO1            TYPE EKKO-INCO1,        "国贸术语
         ZTERM            TYPE EKKO-ZTERM,        "付款条款
         ERNAM            TYPE ERNAM,
         ADRNR            TYPE ADRNR,
         LOEKZ            TYPE ELOEK, "删除标示
         A_ADRNR          TYPE LFA1-ADRNR,
         "表体结构
         MATNR            TYPE EKPO-MATNR,        "物料号
         TXZ01            TYPE EKPO-TXZ01,        "物料描述
         MEINS            TYPE EKPO-MEINS,        "单位
         MENGE            TYPE EKPO-MENGE,        "数量
         BRTWR            TYPE EKPO-BRTWR,        "含税金额
         BRTWR_T          TYPE P DECIMALS 4,        "含税金额
         "         BANFN          TYPE EKPO-BANFN,        "申购单号
         EINDT            TYPE EKET-EINDT,        "交货日期
         KNUMH            TYPE A003-KNUMH ,       "条件记录号
         LDANJIA          TYPE P DECIMALS 4,
         A_KBETR          TYPE I,
         LGORT            TYPE LGORT_D,
         MWSKZ            TYPE MWSKZ,
         EBELN_EBELP      TYPE TDOBNAME,
         STR_SUPPL1       TYPE AD_STRSPP1,
         STR_SUPPL2       TYPE AD_STRSPP2,
         STR_SUPPL3       TYPE AD_STRSPP3,
         A_STR_SUPPL1     TYPE AD_STRSPP1,
         A_STR_SUPPL2     TYPE AD_STRSPP2,
         A_STR_SUPPL3     TYPE AD_STRSPP3,
         NAME2            TYPE AD_NAME2,
         NAME3            TYPE AD_NAME3,
         TDLINE(100),      "备注
         NAME_FIRST(20),
         TEL_NUMBER(20),
         FAX_NUMBER(20),
         IT_EINDT(20),
         LGOBE(20),
         KBETR(20),
         TEXT1(20),
         BEZEI(50),
         STR_SUPPL(250), "英文采购订单需方地址
         A_STR_SUPPL(250), "英文采购供方订单地址
         NAME(250),      "英文采购订需方名称
         GUOMAO(30),     "英文版国贸术语
         TEXT2_TMP(30),       "英文版付款条约
         NAME_LAST(10),   "英文版需方联系人
         MAKTX            TYPE MAKTX,    "英文版物料描述
       END OF STUR_DJFTAB.

DATA:BEGIN OF IT_NAME_FIRST OCCURS 0,        "FOR ALL ENTRIES IN 取数
       BNAME      TYPE BNAME,
       NAME_FIRST TYPE AD_NAMEFIR,

     END OF IT_NAME_FIRST.

DATA:BEGIN OF IT_NAME_LAST OCCURS 0,        "FOR ALL ENTRIES IN 取数
       BNAME     TYPE BNAME,
       NAME_LAST TYPE AD_NAMELAS,

     END OF IT_NAME_LAST.

DATA:BEGIN OF IT_NUMBER OCCURS 0,
       TEL_NUMBER TYPE  AD_TLNMBR1,  "需方电话
       FAX_NUMBER TYPE AD_FXNMBR1,  "需方传真
       BNAME      TYPE BNAME,
     END OF IT_NUMBER.

DATA:BEGIN OF IT_EINDT OCCURS 0,
       EBELN TYPE   EBELN,
       EBELP TYPE   EBELP,
       EINDT TYPE   EINDT,
     END OF IT_EINDT.
DATA:BEGIN OF IT_LGOBE OCCURS 0,
       LGOBE TYPE LGOBE,
       LGORT TYPE LGORT_D,
     END OF IT_LGOBE.

DATA:BEGIN OF IT_KBETR OCCURS 0,
       MWSKZ TYPE MWSKZ,
       KNUMH TYPE KNUMH,
       KBETR TYPE KBETR_KOND,
     END OF IT_KBETR.

DATA:BEGIN OF IT_TEXT1 OCCURS 0,
       TEXT1 TYPE  TEXT1_052,
       ZTERM TYPE  DZTERM,
       SPRAS TYPE SPRAS,
     END OF IT_TEXT1.

DATA:BEGIN OF IT_BEZEI OCCURS 0,
       INCO1 TYPE INCO1,
       BEZEI TYPE BEZEI30,
     END OF IT_BEZEI.

DATA:BEGIN OF IT_MAKTX OCCURS 0,
       MATNR TYPE MATNR,
       MAKTX TYPE MAKTX,
     END OF IT_MAKTX.

DATA:BEGIN OF IT_STR_SUPPL OCCURS 0,
       STR_SUPPL1 TYPE AD_STRSPP1,
       STR_SUPPL2 TYPE AD_STRSPP2,
       STR_SUPPL3 TYPE AD_STRSPP3,
       ADDRNUMBER TYPE AD_ADDRNUM,
       NAME2      TYPE AD_NAME2,
       NAME3      TYPE AD_NAME3,
     END OF IT_STR_SUPPL.

DATA: GT_TEXT LIKE TABLE OF TLINE WITH HEADER LINE.
DATA : IT_DJFTAB   TYPE STANDARD TABLE OF     STUR_DJFTAB.     "创建一个内表,引用这个结构
DATA : WA_DJFTAB   TYPE                       STUR_DJFTAB.     "创建一个工作区,引用和内表一样的结构
DATA: IT_DATA LIKE TABLE OF WA_DJFTAB WITH HEADER LINE.
DATA : IT_SELECTED LIKE TABLE OF WA_DJFTAB WITH HEADER LINE.     "创建一个内表,引用同样结构
DATA: IT_DATA_TMP LIKE TABLE OF WA_DJFTAB WITH HEADER LINE.
DATA: IT_SELECTED_TMP LIKE TABLE OF WA_DJFTAB WITH HEADER LINE.
DATA: LO_OBJDATA     LIKE WWWDATATAB,
      LC_FILENAME    TYPE STRING,
      LC_FULLPATH    TYPE STRING,
      LC_PATH        TYPE STRING,
      LS_DESTINATION LIKE RLGRAP-FILENAME.

*---------------------------------------------------------------------*
* 創建用戶選擇介面
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.                 "创建一个选择界面的模块
PARAMETER:  S_WERKS LIKE EKPO-WERKS  OBLIGATORY MEMORY ID WRK DEFAULT '1000'.
SELECT-OPTIONS: S_EBELN  FOR EKKO-EBELN  MEMORY ID EBE.
SELECT-OPTIONS: S_MATNR  FOR EKPO-MATNR  .
SELECT-OPTIONS: S_LIFNR  FOR LFA1-LIFNR  .
SELECT-OPTIONS: S_EKGRP  FOR EKKO-EKGRP  .
SELECT-OPTIONS: S_BEDAT  FOR EKKO-BEDAT  .
SELECT-OPTIONS: S_MATKL  FOR EKPO-MATKL  .

SELECTION-SCREEN END OF BLOCK BLK01.
*---------------------------------------------------------------------*
* 執行按鈕以後進行的操作
*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM GET_DATA.      "提取数据
  PERFORM GET_DATA_TMP. "数据处理
  PERFORM GET_ALV.      "ALV



FORM GET_DATA.

  CLEAR IT_DJFTAB[].
  SELECT
     A~ERNAM
     A~EKGRP
     B~WERKS
     B~MATKL
     B~EBELP         "采购项目号
     A~EBELN         "采购单号
     A~BEDAT         "订单日期
     A~WAERS         "币种
     A~INCO1         "国贸术语
     A~ZTERM         "付款条约
     C~ADRNR
     D~ADRNR AS A_ADRNR  "供应商地址
     C~NAME1 AS B    "需方
     C~STRAS AS C    "需方送货地址
     D~NAME1 AS D    "供方
     D~NAME2 AS A_NAME2"供方联系人
     D~STRAS AS F    "供方送货地址
     D~TELF1         "供方电话
     D~TELFX         "供方传真
     D~LIFNR         "供应商
     "表体取数
     B~MATNR         "物料号
     B~TXZ01         "物料描述
     B~MEINS         "单位
     B~MENGE         "数量
     B~BRTWR         "含税金额
     B~MWSKZ         "税率
"     B~BANFN         "申购单号
     B~LGORT         "库存地点
     B~LOEKZ         "删除标识

    INTO CORRESPONDING FIELDS OF TABLE IT_DJFTAB
      FROM EKKO  AS A                                INNER JOIN
           EKPO  AS B ON A~EBELN = B~EBELN           INNER JOIN
           T001W AS C ON B~WERKS = C~WERKS           INNER JOIN
           LFA1  AS D ON A~LIFNR = D~LIFNR           "INNER JOIN
    WHERE A~EBELN IN S_EBELN
      AND A~BEDAT IN S_BEDAT
      AND B~MATNR IN S_MATNR
      AND D~LIFNR IN S_LIFNR
      AND A~EKGRP IN S_EKGRP
      AND B~MATKL IN S_MATKL
      AND B~WERKS  =  S_WERKS.

  IF SY-SUBRC = 0.                             "取数
    IT_DATA_TMP[]  =  IT_DJFTAB .
    SORT IT_DATA_TMP BY ERNAM.
    DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ERNAM.
    IF IT_DATA_TMP[] IS NOT INITIAL .
      SELECT
       F~NAME_FIRST    "需方联系人
       E~BNAME
        INTO CORRESPONDING FIELDS OF TABLE IT_NAME_FIRST
        FROM  USR21 AS E                 INNER JOIN
              ADRP  AS F ON E~PERSNUMBER = F~PERSNUMBER
          FOR ALL ENTRIES IN IT_DATA_TMP
          WHERE BNAME = IT_DATA_TMP-ERNAM .
      IF SY-SUBRC = 0.
        LOOP AT IT_DJFTAB INTO WA_DJFTAB .
          READ TABLE IT_NAME_FIRST WITH KEY BNAME = WA_DJFTAB-ERNAM.
          IF SY-SUBRC = 0.
            WA_DJFTAB-NAME_FIRST = IT_NAME_FIRST-NAME_FIRST.
            MODIFY IT_DJFTAB FROM WA_DJFTAB.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY ERNAM.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ERNAM.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
     F~NAME_LAST    "需方联系人
     E~BNAME
      INTO CORRESPONDING FIELDS OF TABLE IT_NAME_LAST
      FROM  USR21 AS E                 INNER JOIN
            ADRP  AS F ON E~PERSNUMBER = F~PERSNUMBER
        FOR ALL ENTRIES IN IT_DATA_TMP
        WHERE BNAME = IT_DATA_TMP-ERNAM .
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_NAME_LAST WITH KEY BNAME = WA_DJFTAB-ERNAM.
        IF SY-SUBRC = 0.
          WA_DJFTAB-NAME_LAST = IT_NAME_LAST-NAME_LAST.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY ERNAM.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ERNAM.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      B~TEL_NUMBER    "需方电话
      B~FAX_NUMBER    "需方传真
      A~BNAME
      INTO CORRESPONDING FIELDS OF TABLE IT_NUMBER
      FROM USR21 AS A     INNER JOIN
           ADCP  AS B  ON   A~PERSNUMBER = B~PERSNUMBER
       FOR ALL ENTRIES IN IT_DATA_TMP
       WHERE BNAME = IT_DATA_TMP-ERNAM .
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_NUMBER WITH KEY BNAME = WA_DJFTAB-ERNAM.
        IF SY-SUBRC = 0.
          WA_DJFTAB-TEL_NUMBER = IT_NUMBER-TEL_NUMBER.
          WA_DJFTAB-FAX_NUMBER = IT_NUMBER-FAX_NUMBER.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY EBELN EBELP.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING EBELN EBELP.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      EBELN
      EBELP
      EINDT   "交货日期
      INTO CORRESPONDING FIELDS OF TABLE IT_EINDT
      FROM EKET
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE EBELN = IT_DATA_TMP-EBELN AND
            EBELP = IT_DATA_TMP-EBELP .
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_EINDT WITH KEY EBELN = WA_DJFTAB-EBELN .
        IF SY-SUBRC = 0.
          WA_DJFTAB-EINDT = IT_EINDT-EINDT.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY LGORT .
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING LGORT.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      LGOBE  "库存地点
      LGORT
      INTO CORRESPONDING FIELDS OF TABLE IT_LGOBE
      FROM T001L
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE LGORT = IT_DATA_TMP-LGORT.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_LGOBE WITH KEY LGORT = WA_DJFTAB-LGORT .
        IF SY-SUBRC = 0.
          WA_DJFTAB-LGOBE = IT_LGOBE-LGOBE.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY MWSKZ.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING MWSKZ.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      J~KNUMH
      K~KBETR
      J~MWSKZ
      INTO CORRESPONDING FIELDS OF TABLE IT_KBETR
      FROM  A003  AS J INNER JOIN
            KONP  AS K ON J~KNUMH = K~KNUMH AND J~MWSKZ = K~MWSK1
     FOR ALL ENTRIES IN IT_DATA_TMP
     WHERE MWSKZ = IT_DATA_TMP-MWSKZ AND J~KSCHL = 'MWVS' AND J~KAPPL = 'TX' AND J~ALAND = 'CN'.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_KBETR WITH KEY MWSKZ = WA_DJFTAB-MWSKZ .
        IF SY-SUBRC = 0.
          WA_DJFTAB-KBETR = IT_KBETR-KBETR.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY ZTERM.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ZTERM.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      TEXT1
      ZTERM
      SPRAS
      INTO CORRESPONDING FIELDS OF TABLE IT_TEXT1
      FROM T052U
     FOR ALL ENTRIES IN IT_DATA_TMP
     WHERE ZTERM = IT_DATA_TMP-ZTERM.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_TEXT1 WITH KEY ZTERM = WA_DJFTAB-ZTERM .
        IF SY-SUBRC = 0.
          WA_DJFTAB-TEXT1 = IT_TEXT1-TEXT1.
        ENDIF.
        MODIFY IT_DJFTAB FROM WA_DJFTAB.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY ZTERM.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ZTERM.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      TEXT1
      ZTERM
      SPRAS
      INTO CORRESPONDING FIELDS OF TABLE IT_TEXT1
      FROM T052U
     FOR ALL ENTRIES IN IT_DATA_TMP
     WHERE ZTERM = IT_DATA_TMP-ZTERM AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_TEXT1 WITH KEY ZTERM = WA_DJFTAB-ZTERM .
        IF SY-SUBRC = 0.
          WA_DJFTAB-TEXT2_TMP = IT_TEXT1-TEXT1.
        ENDIF.
        MODIFY IT_DJFTAB FROM WA_DJFTAB.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY INCO1.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING INCO1.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      INCO1
      BEZEI
      INTO CORRESPONDING FIELDS OF TABLE IT_BEZEI
      FROM TINCT
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE INCO1 = IT_DATA_TMP-INCO1 AND SPRAS = '1'.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_BEZEI WITH KEY INCO1 = WA_DJFTAB-INCO1 .
        IF SY-SUBRC = 0.
          WA_DJFTAB-BEZEI = IT_BEZEI-BEZEI.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY INCO1.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING INCO1.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      INCO1
      BEZEI
      INTO CORRESPONDING FIELDS OF TABLE IT_BEZEI
      FROM TINCT
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE INCO1 = IT_DATA_TMP-INCO1 AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_BEZEI WITH KEY INCO1 = WA_DJFTAB-INCO1 .
        IF SY-SUBRC = 0.
          WA_DJFTAB-GUOMAO = IT_BEZEI-BEZEI.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY ADRNR.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING ADRNR.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      STR_SUPPL1
      STR_SUPPL2
      STR_SUPPL3
      ADDRNUMBER
      NAME2
      NAME3
      INTO CORRESPONDING FIELDS OF TABLE IT_STR_SUPPL
      FROM ADRC
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE ADDRNUMBER = IT_DATA_TMP-ADRNR .
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_STR_SUPPL WITH KEY ADDRNUMBER = WA_DJFTAB-ADRNR .
        IF SY-SUBRC = 0.
          WA_DJFTAB-STR_SUPPL1 = IT_STR_SUPPL-STR_SUPPL1.
          WA_DJFTAB-STR_SUPPL2 = IT_STR_SUPPL-STR_SUPPL2.
          WA_DJFTAB-STR_SUPPL3 = IT_STR_SUPPL-STR_SUPPL3.
          WA_DJFTAB-NAME2 = IT_STR_SUPPL-NAME2.
          WA_DJFTAB-NAME3 = IT_STR_SUPPL-NAME3.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY A_ADRNR.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING A_ADRNR.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      STR_SUPPL1
      STR_SUPPL2
      STR_SUPPL3
      ADDRNUMBER
      INTO CORRESPONDING FIELDS OF TABLE IT_STR_SUPPL
      FROM ADRC
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE ADDRNUMBER = IT_DATA_TMP-A_ADRNR .
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_STR_SUPPL WITH KEY ADDRNUMBER = WA_DJFTAB-A_ADRNR .
        IF SY-SUBRC = 0.
          WA_DJFTAB-A_STR_SUPPL1 = IT_STR_SUPPL-STR_SUPPL1.
          WA_DJFTAB-A_STR_SUPPL2 = IT_STR_SUPPL-STR_SUPPL2.
          WA_DJFTAB-A_STR_SUPPL3 = IT_STR_SUPPL-STR_SUPPL3.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  IT_DATA_TMP[]  =  IT_DJFTAB .
  SORT IT_DATA_TMP BY MATNR.
  DELETE ADJACENT DUPLICATES FROM IT_DATA_TMP COMPARING MATNR.
  IF IT_DATA_TMP[] IS NOT INITIAL .
    SELECT
      MATNR
      MAKTX
      INTO CORRESPONDING FIELDS OF TABLE IT_MAKTX
      FROM MAKT
      FOR ALL ENTRIES IN IT_DATA_TMP
      WHERE MATNR = IT_DATA_TMP-MATNR AND SPRAS = 'E'.
    IF SY-SUBRC = 0.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .
        READ TABLE IT_MAKTX WITH KEY MATNR = WA_DJFTAB-MATNR .
        IF SY-SUBRC = 0.
          WA_DJFTAB-MAKTX = IT_MAKTX-MAKTX.
          MODIFY IT_DJFTAB FROM WA_DJFTAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  LOOP AT IT_DJFTAB INTO WA_DJFTAB.            "单价
    IF WA_DJFTAB-MENGE <> 0.
      WA_DJFTAB-LDANJIA = WA_DJFTAB-BRTWR / WA_DJFTAB-MENGE.
    ENDIF.
    "    IF WA_DJFTAB-KBETR <> 0.
    WA_DJFTAB-KBETR = WA_DJFTAB-KBETR / 10.  "税率算法
    "      ENDIF.
*    condense A_KBETR.
    "付款条约 文本合并
    CONCATENATE  WA_DJFTAB-ZTERM WA_DJFTAB-TEXT1  INTO  WA_DJFTAB-TEXT1 SEPARATED BY '/'.
    "国贸术语 文本合并
    CONCATENATE  WA_DJFTAB-INCO1 WA_DJFTAB-BEZEI  INTO  WA_DJFTAB-BEZEI SEPARATED BY '/'.
    "订单行项目合并
    CONCATENATE  WA_DJFTAB-EBELN WA_DJFTAB-EBELP  INTO  WA_DJFTAB-EBELN_EBELP .
    "英文版需方名称合并
    CONCATENATE  WA_DJFTAB-NAME2 WA_DJFTAB-NAME3  INTO  WA_DJFTAB-NAME .
    "英文版需方地址合并
    CONCATENATE  WA_DJFTAB-STR_SUPPL1  WA_DJFTAB-STR_SUPPL2  WA_DJFTAB-STR_SUPPL3  INTO  WA_DJFTAB-STR_SUPPL .
    "英文版供方地址合并
    CONCATENATE  WA_DJFTAB-A_STR_SUPPL1  WA_DJFTAB-A_STR_SUPPL2  WA_DJFTAB-A_STR_SUPPL3  INTO  WA_DJFTAB-A_STR_SUPPL .
    MODIFY IT_DJFTAB FROM WA_DJFTAB.
  ENDLOOP.
  DELETE IT_DJFTAB WHERE LOEKZ = 'L'. "删除标示

  LOOP AT IT_DJFTAB INTO WA_DJFTAB .
    CALL FUNCTION 'READ_TEXT'   "取备注数据
      EXPORTING
*       CLIENT                  = SY-MANDT
        ID                      = 'F01'
        LANGUAGE                = '1'
        NAME                    = WA_DJFTAB-EBELN_EBELP
        OBJECT                  = 'EKPO'
*       ARCHIVE_HANDLE          = 0
*       LOCAL_CAT               = ' '
* IMPORTING
*       HEADER                  =
*       OLD_LINE_COUNTER        =
      TABLES
        LINES                   = GT_TEXT
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7
        OTHERS                  = 8.

    DATA NUM TYPE TDLINE.
    LOOP AT GT_TEXT.

      NUM = GT_TEXT-TDLINE.
      WA_DJFTAB-TDLINE = NUM.

    ENDLOOP.
    MODIFY IT_DJFTAB FROM WA_DJFTAB.
    CLEAR GT_TEXT[].
  ENDLOOP.

* Implement suitable error handling here
ENDFORM.

FORM GET_DATA_TMP.
  LOOP AT IT_DJFTAB INTO WA_DJFTAB .
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'    "去除前导零
      EXPORTING
        INPUT  = WA_DJFTAB-MATNR
      IMPORTING
        OUTPUT = WA_DJFTAB-MATNR.
    MODIFY IT_DJFTAB FROM WA_DJFTAB.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = WA_DJFTAB-LIFNR
      IMPORTING
        OUTPUT = WA_DJFTAB-LIFNR.
    MODIFY IT_DJFTAB FROM WA_DJFTAB.


    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
      EXPORTING
        INPUT          = WA_DJFTAB-MEINS
        LANGUAGE       = SY-LANGU
      IMPORTING
*       LONG_TEXT      =
        OUTPUT         = WA_DJFTAB-MEINS
*       SHORT_TEXT     =
      EXCEPTIONS
        UNIT_NOT_FOUND = 1
        OTHERS         = 2.
    MODIFY IT_DJFTAB FROM WA_DJFTAB.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.


  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  F_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_ALV .
  PERFORM F_GET_FCAT.

  PERFORM F_GET_LAYOUT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'F_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'F_USER_CMD'
      IS_LAYOUT_LVC            = GS_LAYOUT
      IT_FIELDCAT_LVC          = GT_FIELDCAT[]
    TABLES
      T_OUTTAB                 = IT_DJFTAB[]
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.

FORM F_GET_FCAT .
  DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
  REFRESH GT_FIELDCAT.
  DEFINE  DF_FIELDCAT.
    CLEAR: LS_FIELDCAT.
    LS_FIELDCAT-COL_POS   = GV_I.
    LS_FIELDCAT-TABNAME   = 'GT_DISPLAY'.
    LS_FIELDCAT-FIELDNAME = &1.
    LS_FIELDCAT-SCRTEXT_L = &2.
    LS_FIELDCAT-OUTPUTLEN = &3.
    IF LS_FIELDCAT-FIELDNAME = 'SEL_BOX'.
    LS_FIELDCAT-CHECKBOX     = 'X '.                  "把这个字段作为复选框输出
    LS_FIELDCAT-EDIT         = 'X '.                  "把这个字段更改为可编辑状态
    ENDIF.
    APPEND LS_FIELDCAT TO GT_FIELDCAT.
    ADD 1 TO GV_I.
  END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&      Form  F_GET_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

  DF_FIELDCAT:
  'SEL_BOX'    '选择框'                     '1',
  'EBELN'    '采购订单号'                   '20',
  'EBELP'    '行项目'                       '4',
  'MATNR'    '物料号'                       '15',
  'TXZ01'    '物料描述'                     '50',
  'LIFNR'    '供应商'                       '4',
  'D'       '供应商简称'                    '50',
  'MENGE'    '数量'                         '12',
  'MEINS'    '单位'                         '5',
  'LDANJIA'    '含税单价'                    '25',
  'WAERS'      '币种'                       '5',
   'BRTWR'      '含税金额'                   '25',
   'BEZEI'      '国贸术语'                   '20',
   'KBETR'      '税率(%)'                     '5',
  'EINDT'      '交货日期'                   '15',
  'LGOBE'      '库存地点'                   '30'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  F_GET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_GET_LAYOUT .
  GS_LAYOUT-CWIDTH_OPT = 'X'.           "自动优化列宽
  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-INFO_FNAME = 'ROWCOLOR'.    "行颜色
ENDFORM.

*---------------------------------------------------------------------*
* 用户命令
*---------------------------------------------------------------------*
FORM F_USER_CMD USING UCOMM LIKE SY-UCOMM
                 RS_SELFIELD TYPE SLIS_SELFIELD.
  IF GS_GRID IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        E_GRID = GS_GRID.
  ENDIF.
  IF NOT GS_GRID IS INITIAL.
    CALL METHOD GS_GRID->CHECK_CHANGED_DATA .
  ENDIF.
  CASE UCOMM.
    WHEN 'BUT_PRINT'.

      LOOP AT IT_DJFTAB INTO WA_DJFTAB WHERE SEL_BOX ='X' .   "将工作区内容写入内表,如果这个字段=X
*        CLEAR :IT_SELECTED[], IT_DATA[].                  "每次执行按钮都清空一次内表数据
        APPEND WA_DJFTAB TO IT_SELECTED  .                     "将工作区的数据附加到内表。

      ENDLOOP.
      IF SY-SUBRC = 0.
        IT_DATA[] = IT_SELECTED[].
        SORT IT_DATA BY EBELN.
        DELETE ADJACENT DUPLICATES FROM  IT_DATA COMPARING EBELN.

        IF IT_DATA[] IS NOT INITIAL .
          PERFORM GET_PRINT.                                     "则调用定义的模块
        ELSE.
          MESSAGE '至少选择一个条目' TYPE 'E'.

        ENDIF.
      ENDIF.

    WHEN 'BUT_QX'.   "全选
      LOOP AT IT_DJFTAB INTO WA_DJFTAB .

        IF WA_DJFTAB-SEL_BOX = 'X'.
          WA_DJFTAB-SEL_BOX = ''.
        ELSE.
          WA_DJFTAB-SEL_BOX = ''.
          WA_DJFTAB-SEL_BOX = 'X'.
        ENDIF.
        MODIFY IT_DJFTAB FROM WA_DJFTAB.
      ENDLOOP.

    WHEN 'BUT_PRINT1'.
      LOOP AT IT_DJFTAB INTO WA_DJFTAB WHERE SEL_BOX ='X' .   "将工作区内容写入内表,如果这个字段=X
*        CLEAR :IT_SELECTED[], IT_DATA[].                  "每次执行按钮都清空一次内表数据
        APPEND WA_DJFTAB TO IT_SELECTED  .                     "将工作区的数据附加到内表。

      ENDLOOP.
      IF SY-SUBRC = 0.
        IT_DATA[] = IT_SELECTED[].
        SORT IT_DATA BY EBELN.
        DELETE ADJACENT DUPLICATES FROM  IT_DATA COMPARING EBELN.
        IF IT_DATA[] IS NOT INITIAL .
          PERFORM GET_PRINT1.                                     "则调用定义的模块
        ELSE.
          MESSAGE '至少选择一个条目' TYPE 'E'.

        ENDIF.
      ENDIF.


    WHEN OTHERS.                           "其他的不操作
  ENDCASE.

  RS_SELFIELD-REFRESH ='X'.                "刷新


ENDFORM.

FORM F_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'ZMMD001'.
ENDFORM.     "f_PF_status


FORM GET_PRINT.
  DATA:
    LW_PATH              TYPE RSPOPNAME,
    LW_FUNC_NAME         TYPE RS38L_FNAM,
    T_CONTROL_PARAMETERS TYPE SSFCTRLOP,
    T_OUTPUT_OPTIONS     TYPE SSFCOMPOP.
***获取SMARTFORMS的Function Module***
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'ZMM001'                    "SMARTFORMS的表名
    IMPORTING
      FM_NAME            = LW_FUNC_NAME                      "功能名称
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  CLEAR:T_CONTROL_PARAMETERS,T_OUTPUT_OPTIONS.
***Smart Forms: 控制结构*****
  T_CONTROL_PARAMETERS-PREVIEW       = 'X'.             "不打印预览,X 则打印预览
  T_CONTROL_PARAMETERS-NO_OPEN       = 'X'.             "新的假脱机请求(必写)
  T_CONTROL_PARAMETERS-NO_CLOSE      = 'X'.             "不关闭新的假脱机请求(必写)
  T_CONTROL_PARAMETERS-NO_DIALOG     = ' '.             "弹出打印设置的对话框,X 则不显示框
  T_CONTROL_PARAMETERS-DEVICE        = 'PRINTER'.       "PRINTER\MAIL\TELEFAX,缺省是PRINTER
***SAP Smart Forms: 智能写作器 (传输) 选项*****
  T_OUTPUT_OPTIONS-TDNOPREV  = ' '.                      "是否打印预览,X是不预览。
  T_OUTPUT_OPTIONS-TDNOPRINT = ' '.                      "没有打印预览的打印输出,设置X。
  T_OUTPUT_OPTIONS-TDIMMED   = ' '.                      "立即打印标志。
  T_OUTPUT_OPTIONS-TDDEST    = 'LP01'.                   "假脱机,输出设备。
***调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置必须调用SSF_OPEN***
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      OUTPUT_OPTIONS     = T_OUTPUT_OPTIONS
      CONTROL_PARAMETERS = T_CONTROL_PARAMETERS
      USER_SETTINGS      = ' '
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.
  "循环工作区如果SEL_BOX=X

    CALL FUNCTION LW_FUNC_NAME                          "则循环打印规则
      EXPORTING
        CONTROL_PARAMETERS = T_CONTROL_PARAMETERS     "设置不显示打印确认对话框
        OUTPUT_OPTIONS     = T_OUTPUT_OPTIONS         "默认打印选项设置传输
        USER_SETTINGS      = SPACE
      EXCEPTIONS
        FORMATTING_ERROR   = 1
        INTERNAL_ERROR     = 2
        SEND_ERROR         = 3
        USER_CANCELED      = 4
        OTHERS             = 5.

  IF SY-SUBRC <> 0.
*    MESSAGE S008(ZHKTL1) WITH SY-SUBRC DISPLAY LIKE CNS_E.
*    LEAVE LIST-PROCESSING.
  ENDIF.

***关闭打印机设置***
  CALL FUNCTION 'SSF_CLOSE'
*  IMPORTING
*    JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.


FORM GET_PRINT1.
  DATA:
    LW_PATH              TYPE RSPOPNAME,
    LW_FUNC_NAME         TYPE RS38L_FNAM,
    T_CONTROL_PARAMETERS TYPE SSFCTRLOP,
    T_OUTPUT_OPTIONS     TYPE SSFCOMPOP.
***获取SMARTFORMS的Function Module***
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'ZMMD001'                    "SMARTFORMS的表名
    IMPORTING
      FM_NAME            = LW_FUNC_NAME                      "功能名称
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  CLEAR:T_CONTROL_PARAMETERS,T_OUTPUT_OPTIONS.
***Smart Forms: 控制结构*****
  T_CONTROL_PARAMETERS-PREVIEW       = 'X'.             "不打印预览,X 则打印预览
  T_CONTROL_PARAMETERS-NO_OPEN       = 'X'.             "新的假脱机请求(必写)
  T_CONTROL_PARAMETERS-NO_CLOSE      = 'X'.             "不关闭新的假脱机请求(必写)
  T_CONTROL_PARAMETERS-NO_DIALOG     = ' '.             "弹出打印设置的对话框,X 则不显示框
  T_CONTROL_PARAMETERS-DEVICE        = 'PRINTER'.       "PRINTER\MAIL\TELEFAX,缺省是PRINTER
***SAP Smart Forms: 智能写作器 (传输) 选项*****
  T_OUTPUT_OPTIONS-TDNOPREV  = ' '.                      "是否打印预览,X是不预览。
  T_OUTPUT_OPTIONS-TDNOPRINT = ' '.                      "没有打印预览的打印输出,设置X。
  T_OUTPUT_OPTIONS-TDIMMED   = ' '.                      "立即打印标志。
  T_OUTPUT_OPTIONS-TDDEST    = 'LP01'.                   "假脱机,输出设备。
***调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置必须调用SSF_OPEN***
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      OUTPUT_OPTIONS     = T_OUTPUT_OPTIONS
      CONTROL_PARAMETERS = T_CONTROL_PARAMETERS
      USER_SETTINGS      = ' '
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.
  "循环工作区如果SEL_BOX=X

    CALL FUNCTION LW_FUNC_NAME                          "则循环打印规则
      EXPORTING
        CONTROL_PARAMETERS = T_CONTROL_PARAMETERS     "设置不显示打印确认对话框
        OUTPUT_OPTIONS     = T_OUTPUT_OPTIONS         "默认打印选项设置传输
        USER_SETTINGS      = SPACE
      EXCEPTIONS
        FORMATTING_ERROR   = 1
        INTERNAL_ERROR     = 2
        SEND_ERROR         = 3
        USER_CANCELED      = 4
        OTHERS             = 5.

  IF SY-SUBRC <> 0.
*    MESSAGE S008(ZHKTL1) WITH SY-SUBRC DISPLAY LIKE CNS_E.
*    LEAVE LIST-PROCESSING.
  ENDIF.

***关闭打印机设置***
  CALL FUNCTION 'SSF_CLOSE'
*  IMPORTING
*    JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.
*
*TYPE-POOLS OLE2.
*TYPE-POOLS ICON .
*
*DATA:H_CELL             TYPE OLE2_OBJECT,
*     H_FONT             TYPE OLE2_OBJECT,
*     O_TMPL_APPLICATION TYPE OLE2_OBJECT,
*     O_WORKSHEET        TYPE OLE2_OBJECT,
*     O_SHEET_ROW        TYPE OLE2_OBJECT,
*     O_SHEET_RANGE      TYPE OLE2_OBJECT.
*DATA: STR_TMPLNAME TYPE STRING, "摸版名
*      STR_FILENAME TYPE STRING. "下载文件路径
*
*DATA:G_FIELNAME TYPE RLGRAP-FILENAME.
**---EXCEL 对象
*DATA:O_EXCEL    TYPE OLE2_OBJECT,    "excel object
*     O_WORKBOOK TYPE OLE2_OBJECT, "
*     O_SHEET    TYPE OLE2_OBJECT.
*DEFINE M_MESSAGE.
*  case sy-subrc .
*    when 0.
*    when 1.
*      message id sy-msgid type sy-msgty number sy-msgno
*      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*  endcase.
*END-OF-DEFINITION.
*
*
*
**&---------------------------------------------------------------------*
**&      Form
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
*FORM OPEN_EXCEL USING P_FILENAME LIKE RLGRAP-FILENAME.
*
**start excel
*
*  CREATE OBJECT O_TMPL_APPLICATION 'EXCEL.APPLICATION' .
*  M_MESSAGE.
*  GET PROPERTY OF O_TMPL_APPLICATION 'Workbooks' = O_WORKBOOK.
*
*  CALL METHOD OF O_WORKBOOK 'OPEN'
*    EXPORTING
*      #1 = P_FILENAME.
*  M_MESSAGE.
*
*  SET PROPERTY OF O_TMPL_APPLICATION 'Visible' = '0' .
*  M_MESSAGE.
*
*  CALL METHOD OF O_WORKSHEET 'ACTIVATE'.
*  GET PROPERTY OF O_TMPL_APPLICATION 'ACTIVESHEET' = O_WORKSHEET.
*  M_MESSAGE.
*
*ENDFORM.                    "open_excel
*
*
*
**&---------------------------------------------------------------------*
**&      Form  F_SAVE_FREE
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
*FORM F_SAVE_FREE.
*  GET PROPERTY OF O_TMPL_APPLICATION 'ACTIVEWORKBOOK' = O_WORKBOOK.
*  CALL METHOD OF O_WORKBOOK 'SAVE'.
*  CALL METHOD OF O_WORKBOOK 'CLOSE'. "关闭工作区
*  CALL METHOD OF O_EXCEL 'QUIT'. "退出excel
**  SET PROPERTY OF o_tmpl_application 'EDIT' = '0'.
**  SET PROPERTY OF o_worksheet 'EDIT' = '0'.
**  SET PROPERTY OF o_workbook 'EDIT' = '0'.
**  SET PROPERTY OF o_worksheet 'STATUS' = '0'.
**  M_MESSAGE.
*  FREE OBJECT O_WORKSHEET.     "释放内存
*  M_MESSAGE.
*  FREE OBJECT O_WORKBOOK.
*  M_MESSAGE.
*  FREE OBJECT O_TMPL_APPLICATION.
*  M_MESSAGE.
*  FREE OBJECT O_SHEET_ROW.
*  M_MESSAGE.
*  FREE OBJECT O_SHEET_RANGE.
*  M_MESSAGE.
*  FREE OBJECT O_SHEET.
*  M_MESSAGE.
*  FREE OBJECT O_EXCEL.
*  M_MESSAGE.
*  FREE OBJECT H_CELL.
*  M_MESSAGE.
*  FREE OBJECT H_FONT.
*  M_MESSAGE.
*
*ENDFORM.                    "F_SAVE_FREE
*
**&---------------------------------------------------------------------*
**&      Form  FILL_CELL
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**      -->I          text
**      -->J          text
**      -->BOLD       text
**      -->VAL        text
**----------------------------------------------------------------------*
*FORM FILL_CELL USING I J BOLD VAL.
*  CALL METHOD OF O_TMPL_APPLICATION 'Cells' = H_CELL
*    EXPORTING
*    #1 = I
*    #2 = J.
*  M_MESSAGE.
*
*  SET PROPERTY OF H_CELL 'Value' = VAL.
*  M_MESSAGE.
*  GET PROPERTY OF H_CELL 'Font' = H_FONT.
*  M_MESSAGE.
*  SET PROPERTY OF H_FONT 'Bold' = BOLD.
*  M_MESSAGE.
*ENDFORM.                    "FILL_CELL
*
**&---------------------------------------------------------------------*
**&      Form  insert_row
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**      -->ROW_NO     text
**----------------------------------------------------------------------*
*FORM INSERT_ROW USING ROW_NO.
*  CALL METHOD OF O_TMPL_APPLICATION 'ROWS' = O_SHEET_ROW
*    EXPORTING
*    #1 = ROW_NO.
*  CALL METHOD OF O_SHEET_ROW 'INSERT' NO FLUSH.
*
*ENDFORM.                    "insert_row
*
**&---------------------------------------------------------------------*
**&      Form  fill_excel_range_merge
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**      -->P_ROW_B    text
**      -->P_COL_B    text
**      -->P_ROW_E    text
**      -->P_COL_E    text
**      -->P_VALUE    text
**      -->P_BORDER   text
**      -->P_ALIGN    text
**----------------------------------------------------------------------*
*FORM  FILL_EXCEL_RANGE_MERGE USING P_ROW_B "左上角行
*                                   P_COL_B "左上角列
*                                   P_ROW_E "右下角行
*                                   P_COL_E "右下角列
*                                   P_VALUE "值
*                                   P_BORDER " 带边框1,不带边框0
*                                   P_ALIGN.                 "居中1,不居中0
*
*
*  DATA L_CELL1 TYPE OLE2_OBJECT.
*  DATA L_CELL2 TYPE OLE2_OBJECT.
*
*  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
*    EXPORTING
*      PERCENTAGE = 50
*      TEXT       = ' '.
*
*  CALL METHOD OF O_TMPL_APPLICATION 'Cells' = L_CELL1
*    EXPORTING
*    #1 = P_ROW_B
*    #2 = P_COL_B.
*  CALL METHOD OF O_TMPL_APPLICATION 'Cells' = L_CELL2
*    EXPORTING
*    #1 = P_ROW_E
*    #2 = P_COL_E.
*  CALL METHOD OF O_TMPL_APPLICATION 'Range' = O_SHEET_RANGE
*    EXPORTING
*    #1 = L_CELL1
*    #2 = L_CELL2.
*
*  SET PROPERTY OF O_SHEET_RANGE 'MergeCells' = 1 .
*  SET PROPERTY OF O_SHEET_RANGE 'Value' = P_VALUE.
*
*  IF P_BORDER = 1 .
*    PERFORM RANGE_BORDER USING '1' '' .
*  ENDIF.
*  IF P_ALIGN = '1' .
*    SET PROPERTY OF O_SHEET_RANGE 'HorizontalAlignment' = -4108 .
*    SET PROPERTY OF O_SHEET_RANGE 'VerticalAlignment' = -4108 .
*    FREE O_SHEET_RANGE.
*  ENDIF.
*
*ENDFORM.                    "fill_excel_range_merge
**&---------------------------------------------------------------------*
**&      Form  range_border
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
**      -->P_0386   text
**      -->P_0387   text
**----------------------------------------------------------------------*
*FORM RANGE_BORDER  USING   PLINESTYLE PWEIGHT.
*
*ENDFORM.                    " range_border
*
*
*FORM GET_PRINT.
*  DATA:KEY LIKE WWWDATATAB.
*
*  DATA: L_RC TYPE SY-SUBRC .
*
*  CLEAR KEY .
*  KEY-RELID = 'MI' .
*  KEY-OBJID = 'ZTEST1.XLS' .
*  "  CONCATENATE 'C:_TEMPEXCEL' sy-datum sy-uzeit '.XLS' INTO g_fielname.
*  CONDENSE G_FIELNAME NO-GAPS.
*
*  IF L_RC = 0 .
*    LOOP AT IT_DATA .
*      PERFORM OUTPUT_TEMPLATE USING G_FIELNAME  KEY-OBJID L_RC. "下载模板
*      PERFORM OPEN_EXCEL USING G_FIELNAME. "打开模板
*
*      DATA: PERC TYPE I,
*            CNT  TYPE I.
*      DATA: STXT TYPE STRING.
*      DATA: SPERC(3) TYPE C.
*      PERC = 0. CNT = 1000.
*      DO CNT TIMES.
*        STXT = ''.
*        PERC = SY-INDEX * 100 / CNT.
*        SPERC = PERC.
*        CONCATENATE '已经完成 : '  SPERC '% …… ' INTO STXT.
*        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
*          EXPORTING
*            PERCENTAGE = PERC     "百分比的数值,用来控制秒表的指针。
*            TEXT       = STXT.   "状态栏显示的文本。
*      ENDDO.
*      PERFORM FILL_CELL USING 5 4 0 IT_DATA-BEDAT.       "订单日期
*      PERFORM FILL_CELL USING 6 4 0 IT_DATA-B.           "需方
*      PERFORM FILL_CELL USING 7 4 0 IT_DATA-NAME_FIRST.  "需方联系人
*      PERFORM FILL_CELL USING 8 4 0 IT_DATA-C.           "需方送货地址
*      PERFORM FILL_CELL USING 9 4 0 IT_DATA-TEL_NUMBER.  "需方电话
*      PERFORM FILL_CELL USING 10 4 0 IT_DATA-FAX_NUMBER. "需方传真
*      PERFORM FILL_CELL USING 5 10 0 IT_DATA-EBELN.       "订单编号
*      PERFORM FILL_CELL USING 6 10 0 IT_DATA-D.           "供方
*      PERFORM FILL_CELL USING 7 10 0 IT_DATA-A_NAME2.       "供方联系人
*      PERFORM FILL_CELL USING 8 10 0 IT_DATA-A_STR_SUPPL. "供方送货地址
*      PERFORM FILL_CELL USING 9 10 0 IT_DATA-TELF1.       "供方电话
*      PERFORM FILL_CELL USING 10 10 0 IT_DATA-TELFX.      "供方传真
*      PERFORM FILL_CELL USING 12 3 0 IT_DATA-WAERS.      "币种
*      PERFORM FILL_CELL USING 12 6 0 IT_DATA-BEZEI.      "国贸术语
*      PERFORM FILL_CELL USING 12 9 0 IT_DATA-TEXT1.     "付款条约
*      PERFORM FILL_CELL USING 24 3 0 IT_DATA-B.          "需方
*      PERFORM FILL_CELL USING 24 10 0 IT_DATA-D.          "供方
*      PERFORM FILL_CELL USING 25 4 0 IT_DATA-NAME_FIRST. "采购工程师
*      DATA: LDANJIA TYPE P DECIMALS 4 .
*      DATA: L_NUM TYPE I.
**    LOOP AT IT_DATA INTO WA_DJFTAB.
*      LOOP AT IT_SELECTED WHERE EBELN = IT_DATA-EBELN.
*        DATA NUM TYPE I VALUE 15.
*        L_NUM = L_NUM + 1.
*        PERFORM FILL_CELL USING NUM 2 0 L_NUM.      "
*        PERFORM FILL_CELL USING NUM 3 0 IT_SELECTED-MATNR.      "物料编号
*        PERFORM FILL_CELL USING NUM 4 0 IT_SELECTED-TXZ01.      "物料描述
*        PERFORM FILL_CELL USING NUM 7 0 IT_SELECTED-MEINS.      "单位
*        PERFORM FILL_CELL USING NUM 8 0 IT_SELECTED-MENGE.      "数量
*        IF WA_DJFTAB-MENGE <> 0.
*          LDANJIA = WA_DJFTAB-BRTWR / WA_DJFTAB-MENGE.
*          PERFORM FILL_CELL USING NUM 9 0 LDANJIA.            "含税单价
*          PERFORM FILL_CELL USING NUM 10 0 IT_SELECTED-BRTWR.    "含税金额
*        ENDIF.
*        PERFORM FILL_CELL USING NUM 11 0 IT_SELECTED-EINDT.     "交货日期
*        PERFORM FILL_CELL USING NUM 12 0 IT_SELECTED-KBETR.     "税率
*        "        PERFORM FILL_CELL USING NUM 13 0 IT_SELECTED-BANFN.     "申购单号
*        PERFORM FILL_CELL USING NUM 13 0 IT_SELECTED-LGOBE.     "库存地点
*        PERFORM FILL_CELL USING NUM 15 0 IT_SELECTED-TDLINE.     "备注
*        NUM = NUM + 1.
*        "      PERFORM INSERT_ROW USING NUM. "插入行
*      ENDLOOP .
*      PERFORM F_SAVE_FREE."保存EXCEL模板及内容
*
*      CLEAR : L_NUM .
*      IF NUM <> 15  .
*        NUM = 15.
*      ENDIF.
*      UPDATE EKPO SET ZPRINT = 'X'
*        WHERE EBELN = @IT_DATA-EBELN.
*
*    ENDLOOP.
*  ENDIF.
*  CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
*    EXPORTING
*      APPLICATION            = 'TASKKILL'
*      PARAMETER              = '/IM EXCEL.exe'
*    EXCEPTIONS
*      CNTL_ERROR             = 1
*      ERROR_NO_GUI           = 2
*      BAD_PARAMETER          = 3
*      FILE_NOT_FOUND         = 4
*      PATH_NOT_FOUND         = 5
*      FILE_EXTENSION_UNKNOWN = 6
*      ERROR_EXECUTE_FAILED   = 7
*      SYNCHRONOUS_FAILED     = 8
*      NOT_SUPPORTED_BY_GUI   = 9
*      OTHERS                 = 10.
*
*  CLEAR : IT_SELECTED[] , IT_SELECTED , NUM .
*
*ENDFORM.
*
*
*FORM GET_PRINT1.
*
*  DATA:KEY LIKE WWWDATATAB.
*
*  DATA: L_RC TYPE SY-SUBRC .
*
*  CLEAR KEY .
*  KEY-RELID = 'MI' .
*  KEY-OBJID = 'ZTEST2.XLS' .
*  "  CONCATENATE 'C:_TEMPEXCEL' sy-datum sy-uzeit '.XLS' INTO g_fielname.
*  CONDENSE G_FIELNAME NO-GAPS.
*
*  IF L_RC = 0 .
*    LOOP AT IT_DATA .
*      PERFORM OUTPUT_TEMPLATE USING G_FIELNAME  KEY-OBJID L_RC. "下载模板
*      PERFORM OPEN_EXCEL USING G_FIELNAME. "打开模板
*      DATA: PERC TYPE I,
*            CNT  TYPE I.
*      DATA: STXT TYPE STRING.
*      DATA: SPERC(3) TYPE C.
*      PERC = 0. CNT = 1000.
*      DO CNT TIMES.
*        STXT = ''.
*        PERC = SY-INDEX * 100 / CNT.
*        SPERC = PERC.
*        CONCATENATE '已经完成 : '  SPERC '% …… ' INTO STXT.
*        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
*          EXPORTING
*            PERCENTAGE = PERC     "百分比的数值,用来控制秒表的指针。
*            TEXT       = STXT.   "状态栏显示的文本。
*      ENDDO.
*      PERFORM FILL_CELL USING 2 3 0 IT_DATA-BEDAT.        " 订单日期
*      PERFORM FILL_CELL USING 3 3 0 IT_DATA-NAME.         "需方
*      PERFORM FILL_CELL USING 4 3 0 IT_DATA-NAME_LAST.    "需方联系人
*      PERFORM FILL_CELL USING 5 3 0 IT_DATA-STR_SUPPL.    "需方送货地址
*      PERFORM FILL_CELL USING 6 3 0 IT_DATA-TEL_NUMBER.   "需方电话
*      PERFORM FILL_CELL USING 7 3 0 IT_DATA-FAX_NUMBER.   "需方传真
*      PERFORM FILL_CELL USING 2 10 0 IT_DATA-EBELN.       "订单编号
*      PERFORM FILL_CELL USING 3 10 0 IT_DATA-D.           "供方
*      PERFORM FILL_CELL USING 4 10 0 IT_DATA-A_NAME2.     "供方联系人
*      PERFORM FILL_CELL USING 5 10 0 IT_DATA-A_STR_SUPPL. "供方送货地址
*      PERFORM FILL_CELL USING 6 10 0 IT_DATA-TELF1.       "供方电话
*      PERFORM FILL_CELL USING 7 10 0 IT_DATA-TELFX.       "供方传真
*      PERFORM FILL_CELL USING 8 3 0 IT_DATA-WAERS.        "币种
*      PERFORM FILL_CELL USING 8 7 0 IT_DATA-GUOMAO.       "国贸术语
*      PERFORM FILL_CELL USING 8 10 0 IT_DATA-TEXT2_TMP.   "付款条约
*      PERFORM FILL_CELL USING 18 3 0 IT_DATA-NAME.        "需方
*      PERFORM FILL_CELL USING 18 10 0 IT_DATA-D.          "供方
*      PERFORM FILL_CELL USING 19 3 0 IT_DATA-NAME_LAST.   "采购工程师
*      DATA: LDANJIA TYPE P DECIMALS 4 .
*      DATA: L_NUM TYPE I.
**    LOOP AT IT_DATA INTO WA_DJFTAB.
*      LOOP AT IT_SELECTED WHERE EBELN = IT_DATA-EBELN.
*        DATA NUM TYPE I VALUE 11.
*        L_NUM = L_NUM + 1.
*        PERFORM FILL_CELL USING NUM 2 0 L_NUM.      "
*        PERFORM FILL_CELL USING NUM 3 0 IT_SELECTED-MATNR.      "物料编号
*        PERFORM FILL_CELL USING NUM 4 0 IT_SELECTED-MAKTX.      "物料描述
*        PERFORM FILL_CELL USING NUM 7 0 IT_SELECTED-MEINS.      "单位
*        PERFORM FILL_CELL USING NUM 8 0 IT_SELECTED-MENGE.      "数量
*        IF WA_DJFTAB-MENGE <> 0.
*          LDANJIA = WA_DJFTAB-BRTWR / WA_DJFTAB-MENGE.
*          PERFORM FILL_CELL USING NUM 9 0 LDANJIA.            "含税单价
*          PERFORM FILL_CELL USING NUM 10 0 IT_SELECTED-BRTWR.    "含税金额
*        ENDIF.
*        PERFORM FILL_CELL USING NUM 11 0 IT_SELECTED-EINDT.     "交货日期
*        PERFORM FILL_CELL USING NUM 12 0 IT_SELECTED-KBETR.     "税率
*        "        PERFORM FILL_CELL USING NUM 13 0 IT_SELECTED-BANFN.     "申购单号
*        PERFORM FILL_CELL USING NUM 13 0 IT_SELECTED-LGOBE.     "库存地点
**        PERFORM FILL_CELL USING NUM 14 0 IT_SELECTED-TDLINE.     "备注
*        NUM = NUM + 1.
*        "      PERFORM INSERT_ROW USING NUM. "插入行
*      ENDLOOP .
*      PERFORM F_SAVE_FREE."保存EXCEL模板及内容
*
*      CLEAR : L_NUM .
*      IF NUM <> 11  .
*        NUM = 11.
*      ENDIF.
*    ENDLOOP.
*  ENDIF.
*  CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
*    EXPORTING
*      APPLICATION            = 'TASKKILL'
*      PARAMETER              = '/IM EXCEL.exe'
*    EXCEPTIONS
*      CNTL_ERROR             = 1
*      ERROR_NO_GUI           = 2
*      BAD_PARAMETER          = 3
*      FILE_NOT_FOUND         = 4
*      PATH_NOT_FOUND         = 5
*      FILE_EXTENSION_UNKNOWN = 6
*      ERROR_EXECUTE_FAILED   = 7
*      SYNCHRONOUS_FAILED     = 8
*      NOT_SUPPORTED_BY_GUI   = 9
*      OTHERS                 = 10.
*
*  CLEAR : IT_SELECTED[] , IT_SELECTED , NUM .
*
*ENDFORM.
**----摸版输出————————
*FORM OUTPUT_TEMPLATE USING P_FILEPATH LIKE RLGRAP-FILENAME
*                           P_OBJID LIKE WWWDATATAB-OBJID
*                           P_SUBRC LIKE SY-SUBRC.
*  DATA: L_OBJDATA  LIKE WWWDATATAB,
*        L_FILEPATH LIKE RLGRAP-FILENAME.
*  SELECT SINGLE RELID OBJID INTO CORRESPONDING FIELDS OF L_OBJDATA
*    FROM WWWDATA
*    WHERE SRTF2 = 0
*      AND RELID = 'MI'
*      AND OBJID = P_OBJID.
*  IF SY-SUBRC <> 0 OR L_OBJDATA-OBJID = '@'.
*    MESSAGE E398(00) WITH '摸版文件:' P_OBJID '不存在,请用事务代码SMW0进行加载!' .
*  ENDIF.
*
*  CONDENSE P_FILEPATH NO-GAPS.
*  LC_FILENAME  = IT_DATA-EBELN.
*
*  IF LS_DESTINATION = '' .
*
*    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG "调用保存对话框
*      EXPORTING
*        DEFAULT_EXTENSION    = 'XLS'
*        DEFAULT_FILE_NAME    = LC_FILENAME
*      CHANGING
*        FILENAME             = LC_FILENAME
*        PATH                 = LC_PATH
*        FULLPATH             = LC_FULLPATH
*      EXCEPTIONS
*        CNTL_ERROR           = 1
*        ERROR_NO_GUI         = 2
*        NOT_SUPPORTED_BY_GUI = 3
*        OTHERS               = 4.
*    LS_DESTINATION = LC_FULLPATH.
*  ELSE.
*    CONCATENATE  LC_PATH LC_FILENAME '.XLS' INTO LS_DESTINATION.
*  ENDIF.
*  G_FIELNAME = LS_DESTINATION.
*  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
*    EXPORTING
**     key         = p_objid
*      KEY         = L_OBJDATA
*      DESTINATION = LS_DESTINATION
*    IMPORTING
*      RC          = P_SUBRC
**   CHANGING
**     TEMP        =
*    .
*  IF SY-SUBRC <> 0 .
*    MESSAGE E398(00) WITH '模版' P_OBJID '下载失败'.
*  ENDIF.
*  CLEAR : LC_FILENAME.
*ENDFORM.                    "output_template

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小啊曼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值