*&---------------------------------------------------------------------*
*& Report YMMR0084 *
*& ONESOURCE *
*&---------------------------------------------------------------------*
*& PROGRAM AUTHOR TIME DATA T-CODE *
*& PO-HEADER FOK 2010/03/08 CREATE YOS01 *
*&---------------------------------------------------------------------*
REPORT ymmr0102 NO STANDARD PAGE HEADING
MESSAGE-ID yy LINE-SIZE 100 LINE-COUNT 100.
CONSTANTS: c_folder LIKE rlgrap-filename
VALUE 'D:/OneSource/Z118R85Z_1.TXT'.
CONSTANTS: c_logfile(100) VALUE '/usr/sap/onesource/Z118R85Z_1.TXT',
c_cf_lf(2) TYPE c VALUE cl_abap_char_utilities=>cr_lf .
INCLUDE zfip0001.
TABLES:ekko,ekpo.
DATA:BEGIN OF po_data_get1,
bukrs(4), "公司代码8020
bsart(1), "采购凭证类型1
ernam(4), "158C
filler(4),
ebeln LIKE ekko-ebeln,"采购凭证号
lifnr LIKE ekko-lifnr,"供应商帐户号
aedat LIKE ekko-aedat,"记录的创建日期
aedat1(8) TYPE c,
eadat LIKE ekpo-aedat,
eadat1(8) TYPE c,
elikz LIKE ekpo-elikz,"全部交货
filler1(1),
filler2(9),
waers LIKE ekko-waers,"货币码
extract(8) TYPE c,"导出日期
fillerid(10),
zterm LIKE ekko-zterm,"付款条件代码
filler3(60),
ekgrp LIKE ekko-ekgrp,"采购组
filler4(275),
ztag1 LIKE t052-ztag1,
yday LIKE ynetday-yday,
END OF po_data_get1.
DATA:po_data_get LIKE po_data_get1 OCCURS 0 WITH HEADER LINE.
DATA:g_fname TYPE string.
DATA:BEGIN OF ekpo_tmp1 OCCURS 0,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
elikz LIKE ekpo-elikz,
aedat LIKE ekpo-aedat,
END OF ekpo_tmp1.
DATA:ekpo_tmp LIKE ekpo_tmp1 OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF down_data_get OCCURS 0,
f1(1) TYPE c,"Record Type
f2(4) TYPE c,"Company Code
f3(4) TYPE c,"Site Code
f4(4) TYPE c,"Filler
f5(12) TYPE c,"Purchase Order Number
f6(10) TYPE c,"Supplier Number
f7(8) TYPE c,"PO Placed Date
f8(8) TYPE c,"PO Changed Date
f9(1) TYPE c,"PO Status
f10(1) TYPE c,"Electronic Purchase
f11(9) TYPE c,"Filler
f12(3) TYPE c,"Currency Code
f13(6) TYPE c,"Date of Extract
f14(10) TYPE c,"Contract Id
f15(20) TYPE c,"PO Terms
f16(60) TYPE c,"Filler
f17(4) TYPE c,"Buyer Code
f18(275) TYPE c,"Filler
f19(1) TYPE c,"Filler
END OF down_data_get.
DATA : physical(128).
**D:/usr/sap/DEV/DVEBMGS01/work
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:s_ebeln FOR ekko-ebeln."DEFAULT 4500003946.
SELECT-OPTIONS:s_aedat FOR ekko-aedat.
SELECT-OPTIONS:s_elikz FOR ekpo-elikz NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN SKIP.
PARAMETERS:p_fname LIKE rlgrap-filename DEFAULT c_folder OBLIGATORY.
PARAMETERS:p_lb TYPE c AS CHECKBOX DEFAULT 'X'.
PARAMETERS: f_unix LIKE filename-fileintern DEFAULT c_logfile
OBLIGATORY LOWER CASE.
SELECTION-SCREEN END OF BLOCK bk1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
PERFORM get_f4_filename CHANGING p_fname.
INITIALIZATION.
PERFORM get_date.
START-OF-SELECTION.
IF p_lb IS NOT INITIAL.
PERFORM get_date.
ENDIF.
PERFORM select_data.
PERFORM read_data.
IF p_lb IS INITIAL.
PERFORM dispose_data.
PERFORM avl_data.
ELSE.
PERFORM down_server.
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form get_date
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_date.
CLEAR: s_aedat,s_aedat[].
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
i_date = sy-datum
i_months = '-1'
i_set_last_day_of_month = 'X'
IMPORTING
e_date = s_aedat-high.
CONCATENATE s_aedat-high+(6) '01' INTO s_aedat-low.
s_aedat-sign = 'I'.
s_aedat-option = 'EQ'.
APPEND s_aedat.
ENDFORM. "get_date
*&---------------------------------------------------------------------*
*& Form DOWN_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM down_server .
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
client = sy-mandt
logical_filename = f_unix
eleminate_blanks = ' '
IMPORTING
file_name = physical
EXCEPTIONS
file_not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
physical = f_unix.
ENDIF.
*END OF MOD01
* OPEN DATASET physical FOR OUTPUT IN BINARY MODE. MODE ENCODING DEFAULT
OPEN DATASET physical FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE i999(zk) WITH text-025.
EXIT.
ENDIF.
LOOP AT down_data_get.
TRANSFER down_data_get TO physical .
ENDLOOP.
CLOSE DATASET physical.
IF sy-subrc = 0.
MESSAGE i999(zk) WITH text-023. "'File Successfully downloaded
ENDIF.
ENDFORM. " DOWN_SERVER
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data .
IF s_elikz IS NOT INITIAL.
SELECT ekpo~ebeln ekko~lifnr ekko~aedat ekko~waers
ekko~ekgrp ekko~zterm ekpo~elikz ekpo~ebelp
INTO CORRESPONDING FIELDS OF TABLE po_data_get
FROM ekpo
JOIN ekko ON ekpo~ebeln = ekko~ebeln
WHERE ekpo~ebeln IN s_ebeln
AND ekko~aedat IN s_aedat
AND ekpo~elikz EQ 'X'
AND ekpo~loekz = ''.
ELSE.
SELECT ekpo~ebeln ekko~lifnr ekko~aedat ekko~waers
ekko~ekgrp ekko~zterm ekpo~elikz ekpo~ebelp
INTO CORRESPONDING FIELDS OF TABLE po_data_get
FROM ekpo
JOIN ekko ON ekpo~ebeln = ekko~ebeln
WHERE ekpo~ebeln IN s_ebeln
AND ekko~aedat IN s_aedat
AND ekpo~elikz NE 'X'
AND ekpo~loekz = ''.
ENDIF.
DELETE ADJACENT DUPLICATES FROM po_data_get COMPARING ebeln.
* EKPO_TMP1[] = PO_DATA_GET[].
* LOOP AT po_data_get.
IF po_data_get[] IS INITIAL.
MESSAGE s000 WITH '没有数据' .
RETURN.
ENDIF.
CLEAR ekpo_tmp.
SELECT ebeln ebelp elikz aedat INTO CORRESPONDING FIELDS OF TABLE ekpo_tmp
FROM ekpo
FOR ALL ENTRIES IN po_data_get
WHERE ebeln = po_data_get-ebeln.
* APPEND LINES OF ekpo_tmp1 TO ekpo_tmp.
* CLEAR ekpo_tmp1.
* REFRESH ekpo_tmp1.
* ENDLOOP.
ENDFORM. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
LOOP AT po_data_get.
po_data_get-bsart = 1.
po_data_get-bukrs = 8020.
po_data_get-ernam = '158C'.
po_data_get-extract = sy-datum+2(6).
LOOP AT ekpo_tmp WHERE ebeln = po_data_get-ebeln.
IF ekpo_tmp-elikz <> 'X'.
po_data_get-elikz = 'C'.
ENDIF.
IF ekpo_tmp-aedat > po_data_get-eadat.
po_data_get-eadat = ekpo_tmp-aedat.
ENDIF.
IF ekpo_tmp-aedat < po_data_get-aedat.
po_data_get-aedat = ekpo_tmp-aedat.
ENDIF.
ENDLOOP.
IF po_data_get-elikz <> 'C'.
po_data_get-elikz = 'O'.
ENDIF.
SHIFT po_data_get-lifnr LEFT DELETING LEADING '0'.
*
* SELECT SINGLE MAX( aedat ) FROM ekpo INTO po_data_get-eadat
* WHERE ebeln = po_data_get-ebeln.
* SELECT SINGLE MAX( aedat ) FROM ekpo INTO down_data_get-aedat1
* WHERE ebeln = po_data_get-ebeln.
po_data_get-aedat1 = po_data_get-aedat.
po_data_get-eadat1 = po_data_get-eadat.
SELECT SINGLE ztag1 FROM t052 INTO po_data_get-ztag1
WHERE zterm = po_data_get-zterm.
SELECT SINGLE yday FROM ynetday INTO po_data_get-yday
WHERE ztag1 = po_data_get-ztag1.
** V1.1 搜索不到数据时填充 ''
IF sy-subrc <> 0 .
po_data_get-yday = ''.
ENDIF.
MODIFY po_data_get.
down_data_get-f1 = '1'."f1(1) TYPE c,"Record Type
down_data_get-f2 = '8020'."f2(4) TYPE c,"Company Code
down_data_get-f3 = '158C'."f3(4) TYPE c,"Site Code
down_data_get-f4 = ''."f4(4) TYPE c,"Filler
down_data_get-f5 = po_data_get-ebeln ." f5(12) TYPE c,"Purchase Order Number
down_data_get-f6 = po_data_get-lifnr."f6(10) TYPE c,"Supplier Number
down_data_get-f7 = po_data_get-aedat1."f7(8) TYPE c,"PO Placed Date
down_data_get-f8 = po_data_get-eadat1 ."f8(8) TYPE c,"PO Changed Date
down_data_get-f9 = po_data_get-elikz.
down_data_get-f10 = ''."f10(1) TYPE c,"Electronic Purchase
down_data_get-f11 = ''."f11(9) TYPE c,"Filler
down_data_get-f12 = po_data_get-waers."f12(3) TYPE c,"Currency Code
down_data_get-f13 = sy-datum+2(6)."f13(6) TYPE c,"Date of Extract
down_data_get-f14 = ''."f14(10) TYPE c,"Contract Id
** "f15(20) TYPE c,"PO Terms
CALL FUNCTION 'YGET_TEXT_SPLIT'
EXPORTING
input = po_data_get-yday
IMPORTING
output = down_data_get-f15.
down_data_get-f16 = ''."f16(60) TYPE c,"Filler
down_data_get-f17 = po_data_get-ekgrp."f17(4) TYPE c,"Buyer Code
down_data_get-f18 = ''."f18(275) TYPE c,"Filler
down_data_get-f19 = c_cf_lf.
*down_data_get-f19 = '0'.
APPEND down_data_get.
CLEAR down_data_get.
ENDLOOP.
ENDFORM. " READ_DATA
*&---------------------------------------------------------------------*
*& Form DISPOSE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM dispose_data .
* DESCRIBE TABLE down_data_get LINES fi.
IF down_data_get[] IS NOT INITIAL.
PERFORM frm_download."数据下载NOT
ENDIF.
ENDFORM. " DISPOSE_DATA
*&---------------------------------------------------------------------*
*& Form get_f4_filename
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FILE text
*----------------------------------------------------------------------*
FORM get_f4_filename CHANGING p_file LIKE rlgrap-filename.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE i132(zo01).
ENDIF.
ENDFORM. " get_f4_filename
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_download .
g_fname = p_fname.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = g_fname
filetype = 'ASC'
* write_field_separator = 'X'
* trunc_trailing_ = 'X'
trunc_trailing_blanks_eol = space
TABLES
data_tab = down_data_get
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE e003 WITH g_fname. "下载文件错误
ELSE.
MESSAGE s000(su) WITH '数据成功下载!'.
ENDIF.
ENDFORM. " FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form AVL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM avl_data .
REFRESH i_fieldcat.
add_filed 'PO_DATA_GET' 'BSART' 'Record Type' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'BUKRS' 'Company Code' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'ERNAM' 'Site Code' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLER' 'Filler1' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'EBELN' 'Purchase Order Number' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'LIFNR' 'Supplier Number' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'AEDAT1' 'PO Placed Date' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'EADAT1' 'PO Changed Date' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'ELIKZ' 'PO Status' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLER1' 'Electronic Purchase' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLER2' 'Filler2' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'WAERS' 'Currency Code' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'EXTRACT' 'Date of Extract' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLERID' 'Contract Id' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'YDAY' 'PO Terms' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLER3' 'Filler3' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'EKGRP' 'Buyer Code' 'L' 'CHAR' '' ''.
add_filed 'PO_DATA_GET' 'FILLER4' 'Filler4' 'L' 'CHAR' '' ''.
display_data po_data_get ''.
ENDFORM. " AVL_DATA
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
CASE rs_selfield-sel_tab_field.
WHEN 'choose_data_getn-MATNR'.
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN OTHERS.
ENDCASE.
ENDFORM. "user_command