¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

¡Acceso SAP S/4HANA desde $100!

Acceso a SAP

Como manter o valor hexa 0C ao ativar Unicode em programas Z

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Olá Especialistas,

Preciso verificar nossos programas Z para ver se a bandeira Unicode está ativada e alterá-los, se necessário.

Um dos programas altera o caractere especial "hex 0c".

Aqui está o código do programa não Unicode:

DATA: gv_xstring TYPE x.

DATA: ff_cstring TYPE c.

DATA: BEGIN OF gv_struc,

gv_struc_val TYPE counter1,

END OF gv_struc.

gv_xstring = '0C'.

gv_struc-gv_struc_val = gv_xstring.

ff_cstring = gv_struc.

Depuração:

Variável:                                      Valor    valor-hex

GV_XSTRING                                0C        0C

GV_STRUC-GV_STRUC_VAL    12          0C

FF_CSTRING                                #            0C

Com "Unicode ativo", não é mais permitido fazer "ff_cstring = gv_struc."

Como posso alterar o código para que o valor hexa permaneça o mesmo, 0C?

Em todas as variantes que tentei, o valor hexa muda, mesmo se o valor continuar sendo #.

Você pode me ajudar, por favor?

Muito obrigada,

Monika

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Monika,

Parece que você tem um programa legado que moveu um valor de byte (0c) para um campo CHAR. Isso funcionava em sistemas não Unicode (pois os campos CHAR e HEX tinham o mesmo tamanho, e 0C era um caractere de controle válido), mas não pode funcionar em sistemas Unicode: Em um sistema Unicode, um campo CHAR 1 tem uma largura de 2 bytes. No entanto, um campo HEX1 continua sendo de 1 byte. Portanto, não pode haver uma conversão canônica de CHAR1 para HEX1.

Os caracteres em sistemas Unicode são representados pela codificação UTF-16, que requer 2 bytes por caractere. Agora, um 0C em um sistema não Unicode representa um caractere de avanço de formulário. Na codificação UTF-16 de um sistema Unicode, um caractere de avanço de formulário seria U+000C, que é codificado binariamente como 000C (big-endian, página de códigos SAP 4102) ou 0C00 (little-endian, página de códigos SAP 4103), dependendo da arquitetura do seu hardware.

Você pode usar um field-symbol para mover os 2 bytes de um campo Type X (com comprimento = 2!) para um campo CHAR1 em Unicode. Mas certifique-se de usar a ordem correta dos bytes para representar seu caractere especial no campo X.

Saudações,

Alex

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Roberto, obrigado pela sua ajuda rápida!

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá.

Experimente esta solução

CLASSE cl_abap_container_utilities DEFINIÇÃO CARREGA .

CHAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTANDO

im_value = gv_struc

IMPORTANDO

ex_container = ff_cstring

EXCEÇÕES

illegal_parameter_type = 1

OUTROS = 2 .


Espero ter ajudado

Adeus

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá.

Experimente esta solução

CLASSE cl_abap_container_utilities DEFINIÇÃO CARGA .

CHAMADA MÉTODO cl_abap_container_utilities => fill_container_c

EXPORTAR

im_value = gv_struc

IMPORTAR

ex_container = ff_cstring

EXCEÇÕES

illegal_parameter_type = 1

OUTROS = 2 .


Espero ter ajudado

Adeus

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeconsultor.com

+1 (305) 285-8622

© 2025 Todos los derechos reservados.

Desarrollado por Prime Consultor

¡Hola! Soy Diana, asesora académica de Prime Consultor, indícame en que Academia SAP estás interesado, saludos!
Hola ¿Buscas Academias SAP?