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-SCREEN: BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
PARAMETERS: PONO LIKE EKPO-EBELN. "采购订单号
SELECTION-SCREEN: END 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