MM Onesource 项目

 *&---------------------------------------------------------------------*
*&                       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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值