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.
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.
...