Автор Тема: YTSH_SAVE_LONG_TEXT - Загрузка длинных текстов ОЗМ  (Прочитано 6927 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 737
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Небольшой пример по загрузке длинных текстов к ОЗМ. В принципе данная программа может легко быть преобразована для загрузки любых длинных текстов к любым объектам системы. Файл для обработки используется текстовый с разделителем табуляция (код символа #09). Структура файла:
1. Код материала
2. Код формата для строки
3. Текстовая строка 132 символа

т.е. файл приблизительно такой структуры:
Код: You are not allowed to view links. Register or Login
T-BBC24 /= строка 1
T-BBC24 / строка 2
T-BBC01 /= строка 11
T-BBC01 / строка 12
T-BBC01 / строка 13
T-BBC03 /= строка 21
T-BBC03 / строка 22
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YTSH_SAVE_LONG_TEXT
*&
*&---------------------------------------------------------------------*
*&    Небольшая программа по загрузке длинных текстов к кодам ОЗМ
*&
*&---------------------------------------------------------------------*
REPORT ytsh_save_long_text.
TABLES: rlgrap.

PARAMETERS: p_file LIKE rlgrap-filename DEFAULT 'C:\1.cvs'.


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
DATA: BEGIN OF lt_text OCCURS 1,
  matnr LIKE mara-matnr,
  tdformat LIKE tline-tdformat,
  tdline LIKE tline-tdline,
END OF lt_text.

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = ''
      def_path         = 'C:\'
      mask             = ',*.cvs,*.*.'
      mode             = 'O'
      title            = 'Данные для загрузки'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.



*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM read_text.
  PERFORM save_text.


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
*       Прочитать файл с даннами
*----------------------------------------------------------------------*
*  <--  LT_TEXT - Данные загруженные для обработки
*----------------------------------------------------------------------*
FORM read_text.
  DATA: l_filename TYPE string,
        l_filelength LIKE sy-tabix.

  l_filename = p_file.
  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      filename                = l_filename
      filetype                = 'DAT'
    IMPORTING
      filelength              = l_filelength
    CHANGING
      data_tab                = lt_text[]
    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
      not_supported_by_gui    = 17
      error_no_gui            = 18
      OTHERS                  = 19.
  IF sy-subrc <> 0. MESSAGE 'Ошибка чтения файла с данными' TYPE 'I'. EXIT. ENDIF.
ENDFORM.                    " READ_TEXT
*&---------------------------------------------------------------------*
*&      Form  SAVE_TEXT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  LT_TEXT - Данные для обработки
*----------------------------------------------------------------------*
FORM save_text.
  DATA: l_count LIKE sy-tabix,
        ls_header LIKE thead,
        lt_lines LIKE tline OCCURS 1 WITH HEADER LINE.
  SORT lt_text BY matnr.
  CLEAR: lt_lines[].

  LOOP AT lt_text.
    ON CHANGE OF lt_text-matnr.
      DESCRIBE TABLE lt_lines LINES l_count.
      IF l_count > 0.
        CALL FUNCTION 'SAVE_TEXT'
          EXPORTING
            header   = ls_header
            insert   = 'I'
          TABLES
            lines    = lt_lines
          EXCEPTIONS
            id       = 1
            language = 2
            name     = 3
            object   = 4
            OTHERS   = 5.
      ENDIF.
      ls_header-tdobject = 'MATERIAL'.
      ls_header-tdname = lt_text-matnr.
      ls_header-tdlinesize = '132'.
      ls_header-tdid = 'GRUN'.
      ls_header-tdspras = sy-langu.

      CLEAR: lt_lines[].
    ENDON.
    MOVE-CORRESPONDING lt_text TO lt_lines.
    APPEND lt_lines.
  ENDLOOP.

  DESCRIBE TABLE lt_lines LINES l_count.
  IF sy-subrc = 0.
    CALL FUNCTION 'SAVE_TEXT'
      EXPORTING
        header   = ls_header
      TABLES
        lines    = lt_lines
      EXCEPTIONS
        id       = 1
        language = 2
        name     = 3
        object   = 4
        OTHERS   = 5.
  ENDIF.
  CALL FUNCTION 'COMMIT_TEXT'
    IMPORTING
      commit_count = l_count.
  IF l_count > 0. COMMIT WORK. ENDIF.
ENDFORM.                    " SAVE_TEXT

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: YTSH_SAVE_LONG_TEXT - Загрузка длинных текстов ОЗМ
« Ответ #1 : Февраль 24, 2014, 02:53:03 pm »
В продолжение темы, единственный недостаток приведенного примера, это ИМХО не совсем удобная структура файла для загрузки, по этому немного модифицировал

На вход подаеться файл формата:
[код материала] <tab> [длинный текст]

Код: You are not allowed to view links. Register or Login

report zmm_ozm_load_longtext.
tables: rlgrap.

parameters: p_file like rlgrap-filename default 'C:\1.cvs'.


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
data: begin of lt_text occurs 1,
  matnr like mara-matnr,
  tdformat like tline-tdformat,
  tdline like tline-tdline,
end of lt_text.

data: begin of lt_raw_text occurs 1,
  matnr like mara-matnr,
  longtext type string,
end of lt_raw_text.

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
at selection-screen on value-request for p_file.
  call function 'WS_FILENAME_GET'
    exporting
      def_filename     = ''
      def_path         = 'C:\'
      mask             = ',*.cvs,*.*.'
      mode             = 'O'
      title            = 'Данные для загрузки'
    importing
      filename         = p_file
    exceptions
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      others           = 5.



*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
start-of-selection.
  perform read_text.
  perform convert_text.
  perform save_text.


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
*       Прочитать файл с даннами
*----------------------------------------------------------------------*
*  <--  LT_TEXT - Данные загруженные для обработки
*----------------------------------------------------------------------*
form read_text.
  data: l_filename type string,
        l_filelength like sy-tabix.

  l_filename = p_file.
  call method cl_gui_frontend_services=>gui_upload
    exporting
      filename                = l_filename
      filetype                = 'DAT'
    importing
      filelength              = l_filelength
    changing
      data_tab                = lt_raw_text[]
    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
      not_supported_by_gui    = 17
      error_no_gui            = 18
      others                  = 19.
  if sy-subrc <> 0. message 'Ошибка чтения файла с данными' type 'I'. exit. endif.
endform.                    " READ_TEXT

*&---------------------------------------------------------------------*
*&      Form  convert_text
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form convert_text.
  data: l_line(3000) type c . " ?????  уточнить длину

  data: begin of lt_temp_lines occurs 10,
    line(132) type c,
  end of lt_temp_lines.




  loop at lt_raw_text.

    clear: lt_temp_lines[].

    l_line = lt_raw_text-longtext.

    call function 'RKD_WORD_WRAP'
       exporting
         textline                  = l_line
         delimiter                 = '  '
         outputlen                 = 132
*        IMPORTING
*          OUT_LINE1                 =
*          OUT_LINE2                 =
*          OUT_LINE3                 =
       tables
         out_lines                 = lt_temp_lines
      exceptions
        outputlen_too_large       = 1
        others                    = 2.

    loop at lt_temp_lines.

      lt_text-matnr = lt_raw_text-matnr.

      if sy-tabix = 1.
        lt_text-tdformat = '/='.
      else.
        lt_text-tdformat = '/'.
      endif.

      lt_text-tdline = lt_temp_lines-line.

      append lt_text.

    endloop.


  endloop.


endform.                    "convert_text

*&---------------------------------------------------------------------*
*&      Form  save_text
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form save_text.
  data: l_count like sy-tabix,
        ls_header like thead,
        lt_lines like tline occurs 1 with header line.

  sort lt_text by matnr.
  "CLEAR: lt_lines[].

  loop at lt_text.
    on change of lt_text-matnr.

      describe table lt_lines lines l_count.


      if l_count > 0.
        call function 'SAVE_TEXT'
          exporting
            header   = ls_header
            insert   = 'I'
          tables
            lines    = lt_lines
          exceptions
            id       = 1
            language = 2
            name     = 3
            object   = 4
            others   = 5.
      endif.

      ls_header-tdobject = 'MATERIAL'.
      ls_header-tdname = lt_text-matnr.
      ls_header-tdlinesize = '132'.
      ls_header-tdid = 'GRUN'.
      ls_header-tdspras = sy-langu.

      clear: lt_lines[].
    endon.

    move-corresponding lt_text to lt_lines.


    append lt_lines.
  endloop.

  describe table lt_lines lines l_count.
  if sy-subrc = 0.
    call function 'SAVE_TEXT'
      exporting
        header   = ls_header
      tables
        lines    = lt_lines
      exceptions
        id       = 1
        language = 2
        name     = 3
        object   = 4
        others   = 5.
  endif.
  call function 'COMMIT_TEXT'
    importing
      commit_count = l_count.
  if l_count > 0. commit work. endif.
endform.                    " SAVE_TEXT
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login