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
SAP-MM采购订单SMARTFORMS 打印
最新推荐文章于 2024-04-28 15:54:12 发布