¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Erros de tempo de execução no ECC 6: Solução para o erro DATA_OFFSET_TOO_LARGE

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

Olá a todos,

Tenho a seguinte lógica no ECC 6

FORM ysd_sd09_124_clean_up_zzcmw.

DATA: lv_a0 TYPE i VALUE 160.

DATA: lv_trans(2).

FIELD-SYMBOLS: <lf> TYPE c.

ATRIBUIR lv_a0 A <lf> CASTING TYPE c.

lv_trans(1) = <lf>+3(1).

TRADUZIR vbkd-zzcmw USANDO lv_trans.

ZZCMW é um campo personalizado (campo de garantia do mestre de clientes).

Quando tento criar uma ordem de venda, esta saída de usuário será ativada e dará um dump para o código TRADUZIR vbkd-zzcmw USANDO lv_trans.

Categoria Erro de Programação ABAP

Erros em tempo de execução DATA_OFFSET_TOO_LARGE

Exceção CX_SY_RANGE_OUT_OF_BOUNDS

Programa ABAP SAPMV45A

Componente de Aplicação SD-SLS

Data e Hora 21.09.2011 10:09:33

Texto curto

Acesso a um subcampo inválido: Offset muito grande

O que aconteceu?

Erro no Programa de Aplicação ABAP

O programa ABAP atual "SAPMV45A" teve que ser encerrado porque encontrou

uma declaração que infelizmente não pode ser executada.

Como o chamador do procedimento não poderia ter previsto que

a exceção ocorreria, o programa atual é encerrado.

A razão da exceção é:

No programa em execução "SAPMV45A", o campo "<LF>" do tipo

"C" e comprimento 2 seria acessado com o deslocamento 3.

No entanto, não são permitidos acessos a subcampos com uma especificação de deslocamento

que não seja menor que o comprimento do campo.

Mas o mesmo funciona na versão 4.7. Tentei alterar as declarações mas não funcionou. Você poderia me dizer qual seria a diferença entre as duas versões?

Saudações,

Jyothi CH.

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

4 Respuestas

0
Cargando...

Olá Jyothi,

Em Unicode, o comprimento de um caractere é de 2 bytes. Portanto, o fieldsymbol que você declarou <lf> tem um comprimento de 2.

e você especificou

<lf>+3(1) o que é mais do que 2. Portanto, isso é um erro.

Então, por favor, altere seu código em conformidade.

<lf>+1(1).

Além disso, você está fazendo uma conversão de tipo com c, ou seja, um caractere, está tomando seu valor como #.

Se você remover a conversão de tipo, terá o valor 160 na variável fieldsymbol, mas dará erro ao usar o deslocamento devido à atribuição do campo inteiro.

Saudações

Deepak.

Editado por: Deepak Dhamat em 21 de setembro de 2011 às 10:58 AM

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

Substitua seu código (subcadeia de ponteiro não é uma boa ideia em um sistema Unicode) com a

lv_trans = cl_abap_conv_in_ce=>uccp( '00A0' ).
REPLACEMENT DE TODAS AS OCORRÊNCIAS DE lv_trans EM vbkd-zzcmw POR espaço.

Saudações,

Raymond

NB: Para informações, '00A0' é o valor Unicode de "espaço não quebrável" (NBSP) e o programa tenta traduzi-los para caracteres de espaço simples. (ref [Espaço não quebrável|http://en.wikipedia.org/wiki/Non-breaking_space])

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

Olá Raymond,

Tentei depurar e alterar algumas longitudes das variáveis. O valor de FS é #. Isso significa que o Unicode em nossa versão atual também não estava ativado?

Obrigado!

Cumprimentos,

Benedict

Editado por: Benedict Choa em 21 de setembro de 2011 às 15:54

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

Você ativou o Unicode durante a atualização? Verifique [Atribuições a Símbolos de Campo|http://help.sap.com/saphelp_nw04/helpdata/en/79/c55491b3dc11d5993800508b6b8b11/frameset.htm]

Atribuições a Símbolos de CampoAté agora, a instrução ASSIGN permitia definir endereços além dos limites do campo especificando o deslocamento ou o comprimento. Um erro só ocorria em tempo de execução ao acessar além dos limites do segmento de dados. Os acessos entre campos no deslocamento/comprimento em um ASSIGN, por exemplo, podiam ser usados para editar grupos repetitivos. No entanto, com Unicode, surgem problemas, pois não é possível garantir que as definições de deslocamento ou comprimento entre campos possam ser interpretadas de forma idêntica e significativa em bytes ou caracteres, tanto em um ambiente US quanto em um NUS. Por esse motivo, a instrução ASSIGN foi aprimorada com as adições de RANGE e INCREMENTO, enquanto a adição de CASTING agora suporta todas as variantes dessa instrução. A adição de RANGE é oferecida para todas as variantes válidas de ASSIGN e pode ser combinada com a adição de CASTING.

Tente o seguinte

lv_trans = cl_abap_conv_in_ce=>uccp( '00A0' ).

(De UTF-16 para UTF-8?)

Saudações,

Raymond

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

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?