CE PLUS - Nota 004430

Módulo: DOC. EXPORTAÇÃO

Funcionalidade: CE Reports

Data/Hora da Publicação: 16/08/2007 00:00:00

Data/Hora Última Alteração: 21/02/2011 17:39:59

Descrição da Nota: ERRO UNICODE EM REPORTS EXCEL

Sintoma

Poderia ocorrer um dump no programa de parâmetros e nos programas geradores de reports em Excel,

caso fossem executados em um sistema Unicode.

 

 

Solução

O uso da instrução foi eliminado.

 

Versões Tratadas

7.0

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 04430 Data: 16/08/2007 Hora: 10:11:09

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 04430

Categoria                : Erro de Programa

Prioridade               : Baixa

Versão PW.CE             : 7.0

Pacote                   : 00002

Agrupamento              : 00008

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

03268  - 00001 - 6.0    - 00026  - GERADOR DE REPORTS EM EXCEL

----------------------------------------------------------------------------------------------------

ERRO UNICODE EM REPORTS EXCEL

----------------------------------------------------------------------------------------------------

Palavras Chave:

REPORTS EXCEL UNICODE CHARLEN

 

----------------------------------------------------------------------------------------------------

Objetos da nota:

FUNC CONVERSION_EXIT_ZCR01_INPUT

FUNC CONVERSION_EXIT_ZCR01_OUTPUT

REPS /PWS/MZYCR003F02

REPS /PWS/ZYCRI002

REPS /PWS/ZYCRI003

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em FUNC CONVERSION_EXIT_ZCR01_INPUT

 

FUNCTION conversion_exit_zcr01_input.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

  DATA: strlen TYPE i,

        chrlen TYPE i,

        loops  TYPE i,

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

  DATA: loops  TYPE i,

* << Fim da inclusão

        step   TYPE i,

        result TYPE /pws/zycrl002.

  IF input CO ' 0123456789'.

    result = input.

  ELSE.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

    strlen = numofchar( input ).

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

    loops = numofchar( input ).

* << Fim da inclusão

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

    chrlen = charlen( input ).

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

    step = loops.

* << Fim da inclusão

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

    loops = strlen / chrlen.

    step = strlen.

* << Fim da exclusão

    DO loops TIMES.

      step = step - 1.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

      IF sy-abcde CS input+step(chrlen).

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_INPUT

      IF sy-abcde CS input+step(1).

* << Fim da inclusão

        result = result + ( ( sy-fdpos + 1 ) * 26 ** ( sy-index - 1 ) ).

      ELSE.

...

 

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em FUNC CONVERSION_EXIT_ZCR01_OUTPUT

 

FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT.

  DATA: number    TYPE i,

        quocient  TYPE i,

        remainder TYPE i VALUE 27.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  DATA: chrlen TYPE i,

        offset TYPE i.

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  DATA: offset TYPE i.

* << Fim da inclusão

  CLEAR output.

  CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    number  = input.

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    number = input.

* << Fim da inclusão

  ENDCATCH.

  CHECK sy-subrc = 0 AND number > 0.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  chrlen = charlen( input ).

* << Fim da exclusão

  quocient = number DIV 26.

  remainder = number MOD 26.

  IF remainder = 0.

    remainder = 26.

    SUBTRACT 1 FROM quocient.

  ENDIF.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  offset = ( remainder - 1 ) * chrlen.

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  offset = remainder - 1.

* << Fim da inclusão

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  CONCATENATE sy-abcde+offset(chrlen)

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

  CONCATENATE sy-abcde+offset(1)

* << Fim da inclusão

              output

      INTO output.

  IF quocient > 0.

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    offset = ( quocient - 1 ) * chrlen.

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    offset = ( quocient - 1 ).

* << Fim da inclusão

* >> Início da exclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    CONCATENATE sy-abcde+offset(chrlen)

* << Fim da exclusão

* >> Início da inclusão: FUNCTION CONVERSION_EXIT_ZCR01_OUTPUT

    CONCATENATE sy-abcde+offset(1)

* << Fim da inclusão

                output

        INTO output.

  ENDIF.

ENDFUNCTION.

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/MZYCR003F02

 

...

        p_tablecontrol TYPE cxtab_control.

  DESCRIBE TABLE p_table LINES p_tablecontrol-lines.

ENDFORM.

FORM convert_key_priority_to_table

     USING

        p_key_priority_field TYPE /pws/zycrt010-key_priority

     CHANGING

        p_t_key_priority_table TYPE t_key_priority.

  STATICS: it_master_key_priority_table TYPE t_key_priority.

  DATA: wa_priority_key LIKE LINE OF p_t_key_priority_table[].

* >> Início da exclusão: FORM CONVERT_KEY_PRIORITY_TO_TABLE

  DATA: char_len     TYPE i,

        index        TYPE i,

* << Fim da exclusão

* >> Início da inclusão: FORM CONVERT_KEY_PRIORITY_TO_TABLE

  DATA: index        TYPE i,

* << Fim da inclusão

        marked_id(1) TYPE c.

  IF it_master_key_priority_table[] IS INITIAL.

    PERFORM build_master_key_priority_tab

            CHANGING

               it_master_key_priority_table[].

  ENDIF.

  READ TABLE p_t_key_priority_table

       INTO wa_priority_key

       WITH KEY mark = 'X'

       TRANSPORTING id.

  IF sy-subrc = 0.

    marked_id = wa_priority_key-id.

  ENDIF.

  REFRESH p_t_key_priority_table[].

* >> Início da exclusão: FORM CONVERT_KEY_PRIORITY_TO_TABLE

  char_len = charlen( p_key_priority_field ).

* << Fim da exclusão

  IF NOT p_key_priority_field IS INITIAL.

    DO 16 TIMES.

      index = sy-index - 1.

      READ TABLE it_master_key_priority_table[]

           INTO wa_priority_key

* >> Início da exclusão: FORM CONVERT_KEY_PRIORITY_TO_TABLE

           WITH KEY id = p_key_priority_field+index(char_len).

* << Fim da exclusão

* >> Início da inclusão: FORM CONVERT_KEY_PRIORITY_TO_TABLE

           WITH KEY id = p_key_priority_field+index(1).

* << Fim da inclusão

      IF sy-subrc = 0.

        APPEND wa_priority_key TO p_t_key_priority_table[].

      ENDIF.

    ENDDO.

  ELSE.

    p_t_key_priority_table[] = it_master_key_priority_table[].

  ENDIF.

  IF NOT marked_id IS INITIAL.

    wa_priority_key-mark = 'X'.

    MODIFY p_t_key_priority_table[]

...

 

...

  CLEAR p_key_priority.

  LOOP AT p_t_key_priority INTO wa_key_priority.

    CONCATENATE p_key_priority wa_key_priority-id INTO p_key_priority.

  ENDLOOP.

ENDFORM.

FORM build_master_key_priority_tab

     CHANGING

        p_t_key_priority TYPE t_key_priority.

  FIELD-SYMBOLS: <fs_key_priority> LIKE LINE OF p_t_key_priority[].

  CONSTANTS: ids(16) TYPE c VALUE '0123456789ABCDEF'.

* >> Início da exclusão: FORM BUILD_MASTER_KEY_PRIORITY_TAB

  DATA: index    TYPE i,

        char_len TYPE i.

* << Fim da exclusão

* >> Início da inclusão: FORM BUILD_MASTER_KEY_PRIORITY_TAB

  DATA: index TYPE i.

* << Fim da inclusão

  SELECT dd03l~fieldname AS field

         dd04t~ddtext    AS description

      INTO CORRESPONDING FIELDS OF TABLE p_t_key_priority[]

      FROM dd03l

      LEFT JOIN dd04t

        ON dd04t~rollname   = dd03l~rollname

       AND dd04t~ddlanguage = sy-langu

       AND dd04t~as4local   = 'A'

      WHERE dd03l~tabname  = '/PWS/ZYCRT013'

        AND dd03l~as4local = 'A'

        AND dd03l~keyflag  = 'X'.

  IF sy-subrc = 0.

    DELETE p_t_key_priority[] FROM 1 TO 3.

* >> Início da exclusão: FORM BUILD_MASTER_KEY_PRIORITY_TAB

    char_len = charlen( ids ).

* << Fim da exclusão

    LOOP AT p_t_key_priority ASSIGNING <fs_key_priority>.

      index = sy-tabix - 1.

* >> Início da exclusão: FORM BUILD_MASTER_KEY_PRIORITY_TAB

      MOVE ids+index(char_len) TO <fs_key_priority>-id.

* << Fim da exclusão

* >> Início da inclusão: FORM BUILD_MASTER_KEY_PRIORITY_TAB

      MOVE ids+index(1) TO <fs_key_priority>-id.

* << Fim da inclusão

    ENDLOOP.

    UNASSIGN <fs_key_priority>.

...

 

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/ZYCRI002

 

...

             p_sheet_password

             p_t_excel_content[]

             p_t_sect_height[]

             p_t_options[].

ENDFORM.

FORM build_rep_param_sort_criteria

     USING

        p_key_priority TYPE /pws/zycrt010-key_priority

     CHANGING

        p_sort_criteria TYPE s_sort_criteria.

* >> Início da exclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

  DATA: char_len    TYPE i,

        num_of_char TYPE i,

* << Fim da exclusão

* >> Início da inclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

  DATA: num_of_char TYPE i,

* << Fim da inclusão

        index       TYPE i.

  FIELD-SYMBOLS: <fs_field> LIKE p_sort_criteria-field_01.

  num_of_char = numofchar( p_key_priority ).

* >> Início da exclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

  char_len = charlen( p_key_priority ).

* << Fim da exclusão

  DO num_of_char TIMES.

    index = sy-index - 1.

* >> Início da exclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

    IF p_key_priority+index(char_len) IS INITIAL.

* << Fim da exclusão

* >> Início da inclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

    IF p_key_priority+index(1) IS INITIAL.

* << Fim da inclusão

      UNASSIGN <fs_field>.

      EXIT.

    ENDIF.

    ASSIGN COMPONENT sy-index OF STRUCTURE p_sort_criteria

                              TO <fs_field>.

* >> Início da exclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

    CASE p_key_priority+index(char_len).

* << Fim da exclusão

* >> Início da inclusão: FORM BUILD_REP_PARAM_SORT_CRITERIA

    CASE p_key_priority+index(1).

* << Fim da inclusão

      WHEN '0'.

        <fs_field> = 'SPRAS'.

      WHEN '1'.

        <fs_field> = 'BUKRS'.

      WHEN '2'.

        <fs_field> = 'WERKS'.

      WHEN '3'.

        <fs_field> = 'J_1BBRANCH'.

      WHEN '4'.

        <fs_field> = 'INCO1'.

...

 

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/ZYCRI003

 

...

       END OF s_format_codigo,

       t_format_codigo TYPE STANDARD TABLE OF s_format_codigo.

FORM get_occupied_rows

     USING

        p_string    TYPE c

        p_width     TYPE i

     CHANGING

        p_row_count TYPE i.

  DATA: string_length    TYPE i,

        string_index     TYPE i,

* >> Início da exclusão: FORM GET_OCCUPIED_ROWS

        char_lenght      TYPE i,

* << Fim da exclusão

        current_char(1)  TYPE c,

        line_index       TYPE i,

        last_break_index TYPE i VALUE -1.

  string_length = numofchar( p_string ).

* >> Início da exclusão: FORM GET_OCCUPIED_ROWS

  char_lenght   = charlen( p_string ).

* << Fim da exclusão

  IF string_length < p_width.

    p_row_count = 1.

    EXIT.

  ENDIF.

  WHILE string_index < string_length.

    string_index = sy-index - 1.

* >> Início da exclusão: FORM GET_OCCUPIED_ROWS

    current_char = p_string+string_index(char_lenght).

* << Fim da exclusão

* >> Início da inclusão: FORM GET_OCCUPIED_ROWS

    current_char = p_string+string_index(1).

* << Fim da inclusão

    string_index = string_index + 1.

    ADD 1 TO line_index.

    IF current_char CA ' -'.

      last_break_index = line_index.

    ENDIF.

    IF line_index > p_width.

      IF last_break_index > 0.

        line_index = line_index - last_break_index.

      ELSE.

        line_index = 1.

...