Y_BC_TA_EXCHANGE

*&--------------------------------------------------------------------*
*& Report  Y_BC_TA_EXCHANGE
*&
*&---------------------------------------------------------------------*
************************************************************************
* Programm zum Up- und Download von lokalen Transportaufträgen         *
*                                                                      *
* Version für ERP 2005                                                 *
* ACHTUNG: DAS PROGRAMM DARF NICHT FÜR R/3 SYSTEME VERWENDET WERDEN,   *
*          DIE DEN EBCDIC-CODE (IBM Systeme) verwenden !               *
************************************************************************
REPORT  Y_BC_TA_EXCHANGE    LINE-SIZE 170.

TYPES: BEGIN OF s_buffer,
         data(1024) TYPE x,
       END OF s_buffer,
       t_buffer     TYPE STANDARD TABLE OF s_buffer WITH DEFAULT KEY.

DATA: gt_function   TYPE ui_functions.

SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME NO INTERVALS.
* Selection screen *
PARAMETERS: p_trkorr TYPE e070-trkorr OBLIGATORY.
PARAMETERS: p_lpath  TYPE draw-filep  OBLIGATORY DEFAULT 'c:\temp\'.

SELECTION-SCREEN SKIP.

PARAMETERS: p_down RADIOBUTTON GROUP func DEFAULT 'X'.
PARAMETERS: p_up   RADIOBUTTON GROUP func.
SELECTION-SCREEN END OF BLOCK opt.

DATA: gv_e070      TYPE e070,
      gv_answer    TYPE char1.

DATA: pos          TYPE i,
      temp         TYPE c.

DATA: path         TYPE filep,
      path_cofile  TYPE filep,
      path_data    TYPE filep,
      path_bin     TYPE filep.

DATA: fk           TYPE filep,
      fr           TYPE filep,
      fd           TYPE filep.

DATA: separator    TYPE c.

CONSTANTS: c_true       TYPE char1       VALUE 'X',
           c_false      TYPE char1       VALUE ' ',
           c_released   TYPE trstatus    VALUE 'R'.

*----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.

* some standard functions are not supported:
  APPEND: 'PRIN' TO gt_function,
          'SPOS' TO gt_function,
          'SJOB' TO gt_function,
          'DELS' TO gt_function,
          'DELA' TO gt_function,
          'LVUV' TO gt_function,
          'SCRH' TO gt_function.

  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  = sy-pfkey
    TABLES
      p_exclude = gt_function.


AT SELECTION-SCREEN.
  pos  = STRLEN( p_lpath ) - 1.
  temp =  p_lpath+pos(1).
  CHECK NOT temp = '\'.
  CONCATENATE p_lpath '\' INTO p_lpath.

AT SELECTION-SCREEN ON BLOCK opt.

  SELECT SINGLE * INTO gv_e070
       FROM e070
       WHERE trkorr = p_trkorr.

  IF p_up EQ c_true.
    IF sy-subrc EQ 0.
      MESSAGE i208(00) WITH text-006.
    ENDIF.
  ELSE.
    IF sy-subrc NE 0.
*     Transportauftrag &1 ist nicht vorhanden
      MESSAGE e016(sctm) WITH p_trkorr.
    ELSE.
      IF NOT gv_e070-strkorr IS INITIAL.
*       Geben Sie eine Transportauftragsnummer ein
        MESSAGE e074(scpr).
      ELSEIF NOT gv_e070-trstatus EQ c_released.
*       Transportauftrag & ist nicht freigegeben
        MESSAGE e381(stralan_msag) WITH p_trkorr.
      ENDIF.
    ENDIF.
  ENDIF.

START-OF-SELECTION.

* Determine transport base directory *
  CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'DIR_TRANS'
                     ID 'VALUE' FIELD  path.              "#EC CI_CCALL

* Determine file/path separator *
  IF sy-opsys = 'Windows NT'.
    separator = '\'.                                        "#EC NOTEXT
  ELSE. "LINUX
    separator = '/'.                                        ""#EC NOTEXT
  ENDIF.

* Determine transport directories *
  CONCATENATE path separator 'cofiles' separator INTO path_cofile.
  CONCATENATE path separator 'data'    separator INTO path_data.
  CONCATENATE path separator 'data'    separator INTO path_bin.
  WRITE  / 'Paths:'.                                        "#EC NOTEXT
  WRITE: /  path_cofile,path_data,path_bin.
  SKIP.

* Build filenames *
  CONCATENATE p_trkorr+3(7) p_trkorr+0(3) INTO fk SEPARATED BY '.'.
  CONCATENATE 'R' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fr.
  CONCATENATE 'D' p_trkorr+4(6) '.' p_trkorr+0(3) INTO fd.

* Up- or download transport request *
  IF p_down = 'X'.                                          "#EC NOTEXT
    PERFORM download USING path_cofile p_lpath fk.
    PERFORM download USING path_data   p_lpath fr.
    PERFORM download USING path_data   p_lpath fd.
  ELSE.
    CLEAR gv_answer.
    IF p_trkorr EQ gv_e070-trkorr.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          titlebar              = text-001
          text_question         = text-002
          text_button_1         = text-003
          text_button_2         = text-004
          default_button        = '2'
          display_cancel_button = c_false
        IMPORTING
          answer                = gv_answer
        EXCEPTIONS
          text_not_found        = 0
          OTHERS                = 0.
    ENDIF.
    IF gv_answer IS INITIAL     OR
       gv_answer EQ 'J'.                                    "#EC NOTEXT
      PERFORM upload USING p_lpath path_cofile fk.
      PERFORM upload USING p_lpath path_data   fr.
      PERFORM upload USING p_lpath path_data   fd.
    ELSE.
      WRITE:/ text-005.
      CLEAR gv_e070.
    ENDIF.
  ENDIF.


*---------------------------------------------------------------------*
*       FORM download                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM download USING srcpath  TYPE filep
                    dstpath  TYPE filep
                    file     TYPE filep.

  DATA: lt_buffer       TYPE t_buffer,
        ls_buffer       TYPE s_buffer.

  DATA: filename        TYPE rlgrap-filename,
        lv_filename     TYPE string,
        reclen          TYPE i,
        filelen         TYPE i.

  DATA: lv_subrc        TYPE sy-subrc.
*-----------------------------------------------------------------------

* Read input file *
  CONCATENATE srcpath file INTO filename.

  OPEN DATASET filename FOR INPUT IN BINARY MODE.
  CHECK sy-subrc EQ 0.

* entry for while                                   NEW FOR ERP 2005 !!!
  lv_subrc = 0.
  WHILE lv_subrc = 0.
    READ DATASET filename INTO ls_buffer LENGTH reclen.
    lv_subrc = sy-subrc.
    filelen = filelen + reclen.
    INSERT ls_buffer INTO TABLE lt_buffer.
  ENDWHILE.

  CLOSE DATASET filename.

  CHECK NOT lt_buffer IS INITIAL.

* Download file *
  CONCATENATE dstpath file INTO filename.
  lv_filename = filename.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize            = filelen
      filename                = lv_filename
      filetype                = 'BIN'
    TABLES
      data_tab                = lt_buffer
    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 EQ 0.
    WRITE: / text-007, file.
  ELSE.
    WRITE: / text-008, file.
  ENDIF.

  FREE: lt_buffer.

ENDFORM.                    "download


*---------------------------------------------------------------------*
*       FORM upload                                                   *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM upload USING srcpath  TYPE filep
                  dstpath  TYPE filep
                  file     TYPE filep.

  DATA: lt_buffer          TYPE t_buffer,
        ls_buffer          TYPE s_buffer.

  DATA: filename           TYPE rlgrap-filename,
        lv_filename        TYPE string,
        reclen             TYPE i,
        filelen            TYPE i.

*-----------------------------------------------------------------------

* Check if file exists *
  CONCATENATE srcpath file INTO filename.

  lv_filename = filename.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lv_filename
      filetype                = 'BIN'
    IMPORTING
      filelength              = filelen
    TABLES
      data_tab                = lt_buffer
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      OTHERS                  = 17.

  IF sy-subrc EQ 0.
*   Write file to server *
    CONCATENATE dstpath file INTO filename.

    OPEN DATASET filename FOR OUTPUT IN BINARY MODE.
    CHECK sy-subrc EQ 0.

    LOOP AT lt_buffer INTO ls_buffer.
      DESCRIBE FIELD ls_buffer-data LENGTH reclen
               IN BYTE MODE.
      IF filelen > reclen.
        filelen = filelen - reclen.
      ELSE.
        reclen = filelen.
      ENDIF.
      TRANSFER ls_buffer TO filename LENGTH reclen.
    ENDLOOP.

    CLOSE DATASET filename.

    WRITE: / text-011, file.

  ELSEIF sy-subrc NE 1.
*   a real error occured
    WRITE:/ text-009, file.
  ELSE.
*   it can be an error but it must be an error
    WRITE:/ text-010, file.
  ENDIF.

  FREE: lt_buffer.

ENDFORM.                    "upload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP_Damon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值