| Ещё раз добрый день, уважаемые коллеги!Помогите, пожалуйста, разобраться с текстовым файлом формата UTF-8.
 В файл выгружается таблица с данными, первой строкой которой идёт строка с названиями полей этой таблицы. Файл бинарный, необходимо
 было, чтобы он выгружал не всё одной строкой, а красиво, со столбцами. Поэтому был написан следующий код:
 
 * For file
 DATA: l_fpath              TYPE string,
 lv_flag              TYPE flag,
 lv_xbuffer           TYPE xstring.
 DATA: lo_converter         TYPE REF TO cl_abap_conv_out_ce.
 CONSTANTS: lc_ctab_line_size TYPE i VALUE 500.
 TYPES: ty_xtab_line(lc_ctab_line_size) TYPE x.
 DATA: lv_tab_lines TYPE i.
 DATA: lv_file_size TYPE i.
 DATA: lv_buf_size TYPE i.
 DATA: lt_xtab TYPE STANDARD TABLE OF ty_xtab_line WITH DEFAULT KEY.
 DATA: lv_xline TYPE ty_xtab_line.
 FIELD-SYMBOLS: <lv_cline> TYPE c.
 DATA: lv_offset TYPE i,
 lv_size TYPE i.
 DATA: lv_temp_size TYPE i.
 DATA: lv_stop TYPE flag.
 
 PERFORM fill_first_line CHANGING ls_data.
 *Fill the header line for interface(only for ImportStore)
 IF sy-tabix = 1.
 PERFORM convert_to_bin USING ls_data
 lv_flag
 CHANGING lo_converter.
 lv_flag = 'X'.
 ENDIF.
 
 LOOP AT lt_knvv ASSIGNING <fs_knvv>.
 CLEAR: ls_data.
 
 AT NEW spart.
 IF <fs_knvv>-hkunnr IS NOT INITIAL.
 DELETE lt_knvv WHERE kunnr = <fs_knvv>-kunnr
 AND vkorg = <fs_knvv>-vkorg
 AND vtweg = <fs_knvv>-vtweg
 AND spart <> <fs_knvv>-spart.
 PERFORM fill_store USING <fs_knvv>
 CHANGING ls_data.
 PERFORM fill_store_hier TABLES lt_mask lt_class2 lt_class1
 USING <fs_knvv>
 CHANGING ls_data.
 
 PERFORM convert_to_bin USING ls_data
 lv_flag
 CHANGING lo_converter.
 ELSE.
 CLEAR ls_knvv_2.
 LOOP AT lt_knvv INTO ls_knvv_2 WHERE kunnr = <fs_knvv>-kunnr
 AND vkorg = <fs_knvv>-vkorg
 AND vtweg = <fs_knvv>-vtweg
 AND hkunnr IS NOT INITIAL.
 
 DELETE lt_knvv WHERE kunnr = ls_knvv_2-kunnr
 AND vkorg = ls_knvv_2-vkorg
 AND vtweg = ls_knvv_2-vtweg.
 
 PERFORM fill_store USING ls_knvv_2
 CHANGING ls_data.
 
 PERFORM fill_store_hier TABLES lt_mask lt_class2 lt_class1
 USING ls_knvv_2
 CHANGING ls_data.
 PERFORM convert_to_bin USING ls_data
 lv_flag
 CHANGING lo_converter.
 EXIT.
 ENDLOOP.
 IF sy-subrc <> 0.
 
 DELETE lt_knvv WHERE kunnr = <fs_knvv>-kunnr
 AND vkorg = <fs_knvv>-vkorg
 AND vtweg = <fs_knvv>-vtweg
 AND spart <> <fs_knvv>-spart.
 
 PERFORM fill_store USING <fs_knvv>
 CHANGING ls_data.
 PERFORM fill_store_hier TABLES lt_mask lt_class2 lt_class1
 USING <fs_knvv>
 CHANGING ls_data.
 PERFORM convert_to_bin USING ls_data
 lv_flag
 CHANGING lo_converter.
 ENDIF.
 ENDIF.
 ENDAT.
 ENDLOOP.
 
 l_path  = path.
 l_fname = fname.
 
 *  CALL METHOD go_files_tools->file_download
 *    EXPORTING
 *      im_catalog  = l_path
 *      im_fname    = l_fname
 *      im_filetype = 'DAT'
 *      im_data     = lt_data
 *      im_codepage = g_codepage_utf
 *    EXCEPTIONS
 *      error       = 1
 *      OTHERS      = 2.
 
 lv_xbuffer = lo_converter->get_buffer( ).
 lv_buf_size = XSTRLEN( lv_xbuffer ).
 lv_file_size = lv_buf_size.
 CLEAR lv_stop.
 CLEAR lv_offset.
 DO.
 lv_temp_size = lv_offset + lc_ctab_line_size.
 IF lv_temp_size < lv_buf_size.
 lv_size = lc_ctab_line_size.
 ELSE.
 lv_size = lv_buf_size - lv_offset.
 lv_stop = 'X'.
 ENDIF.
 lv_xline = lv_xbuffer+lv_offset(lv_size).
 APPEND lv_xline TO lt_xtab.
 ADD lv_size TO lv_offset.
 IF lv_stop = 'X'.
 EXIT.
 ENDIF.
 ENDDO.
 
 * Download a file with encoding UTF-8
 * Get File Path
 CALL METHOD go_files_tools->get_file_path
 EXPORTING
 im_catalog = l_path
 im_fname   = l_fname
 RECEIVING
 re_path    = l_fpath.
 
 CHECK NOT l_fpath IS INITIAL.
 DATA: l_tab TYPE char01.
 
 CALL METHOD cl_gui_frontend_services=>gui_download
 EXPORTING
 bin_filesize              = lv_file_size
 filename                  = l_fpath
 filetype                  = 'BIN'
 append                    = space
 write_field_separator     = space
 trunc_trailing_blanks     = ''
 write_lf                  = ''
 trunc_trailing_blanks_eol = ''
 CHANGING
 data_tab                  = lt_xtab
 EXCEPTIONS
 OTHERS                    = 1.
 
 *&---------------------------------------------------------------------*
 *&      Macro
 *&---------------------------------------------------------------------*
 *       Define macro for binary fale
 *----------------------------------------------------------------------*
 * Remove row separators - CR LF if any.
 DEFINE row_separator_remove.
 replace all occurrences of gv_row_separator(1)
 in &1 with space.
 replace all occurrences of gv_row_separator+1(1)
 in &1 with space.
 END-OF-DEFINITION.
 
 *&---------------------------------------------------------------------*
 *&      Form  CONVERT_TO_BIN
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *      -->P_LS_DATA  text
 *      -->P_LV_FLAG  text
 *      <--P_LV_XBUFFER  text
 *----------------------------------------------------------------------*
 FORM convert_to_bin  USING    p_ls_data    TYPE any
 p_lv_flag    TYPE flag
 CHANGING  p_lo_conv    TYPE REF TO cl_abap_conv_out_ce.
 DATA: lv_out_str           TYPE string,
 lv_bin_data          TYPE xstring,
 lo_converter         TYPE REF TO cl_abap_conv_out_ce.
 
 **********************
 
 DATA: lv_xbuffer TYPE xstring.
 FIELD-SYMBOLS: <lv_cline> TYPE c.
 UNASSIGN <lv_cline>.
 ASSIGN p_ls_data TO <lv_cline> CASTING.
 row_separator_remove <lv_cline>.
 p_lo_conv->convert( EXPORTING data = <lv_cline>
 IMPORTING buffer = lv_xbuffer ).
 IF p_lv_flag IS INITIAL .
 CONCATENATE cl_abap_char_utilities=>byte_order_mark_utf8 lv_xbuffer INTO lv_xbuffer IN BYTE MODE.
 ENDIF.
 CALL METHOD p_lo_conv->write( lv_xbuffer ).
 
 
 p_lo_conv->convert( EXPORTING data = gv_row_separator
 IMPORTING buffer = lv_xbuffer ).
 CALL METHOD p_lo_conv->write( lv_xbuffer ).
 
 ENDFORM.                    " CONVERT_TO_BIN
 
 FORM fill_first_line  CHANGING p_ls_data TYPE zmseries_store.
 
 p_ls_data-cdstore                      = text-046.
 p_ls_data-cdstatus                     = text-047.
 p_ls_data-idinstitutiontype            = text-048.
 p_ls_data-cdstorebrand                 = text-049.
 p_ls_data-dsname                       = text-050.
 p_ls_data-dscorporatename              = text-051.
 p_ls_data-dsshortname                  = text-079.
 p_ls_data-cdlegalcode1                 = text-052.
 p_ls_data-cdbranch                     = text-053.
 p_ls_data-cdlegalcode2                 = text-054.
 p_ls_data-nrddd1                       = text-055.
 p_ls_data-nrphone1                     = text-056.
 p_ls_data-nrextphone1                  = text-057.
 p_ls_data-nrddd2                       = text-058.
 p_ls_data-nrphone2                     = text-059.
 p_ls_data-nrextphone2                  = text-060.
 p_ls_data-nrdddfax                     = text-061.
 p_ls_data-nrfax                        = text-062.
 p_ls_data-nrextfax                     = text-063.
 p_ls_data-dsemail                      = text-064.
 p_ls_data-cdclass1                     = text-065.
 p_ls_data-cdclass2                     = text-066.
 p_ls_data-cdclass3                     = text-067.
 p_ls_data-dsnotes                      = text-068.
 p_ls_data-flexi1                       = text-069.
 p_ls_data-flexi2                       = text-070.
 p_ls_data-cdfiscaljurisdiction         = text-071.
 p_ls_data-cdfiscaljurisdictionsupplier = text-072.
 p_ls_data-cdstorefiscalclass           = text-073.
 p_ls_data-vlcreditlimit                = text-074.
 p_ls_data-dtcreditlimitlastupdate      = text-075.
 p_ls_data-cddefaultpaymentterm         = text-076.
 p_ls_data-cdpricegroup                 = text-077.
 p_ls_data-cdpaymenttermgroup           = text-078.
 ENDFORM.                    " FILL_FIRST_LINE
 *INFDEVELOP 01.04.2013 end of insertion
 
 
 Итак, в чём заключается проблема: непосредственно в строке с заголовком. Дело в том, что она не выгражается в одну строку, а перескакивает на другую. Хотя, как я думала, символ перевода каретки не позволит этого. CONSTANTS: lc_ctab_line_size TYPE i VALUE 500 и прочее разбиение было введено с надеждой, что несколько строк в таблице lt_xtab изменят положение дел - но это ничего не изменило. Сами данные выгружаются корректно,
 строка таблицы - строка в файле. Меняла и значение 500 на 3000(хотя для строки загловка было 1286). Ничего не помогает! Что делать? Кто-нибудь сталкивался с такой проблемой?
 
 
 
						
							|   |  |