Ayuda SAP

Conservar espacios en Blanco en un campo

Hola, estoy necesitando que en un campo que es carácter de longitud 12, luego que coloque el texto que es de longitud 8 me respete los 4 caracteres restante con espacios en blanco, mi codigo lo tengo actualmente así pero no lo hace:

DATA: BEGIN OF ti_mercantil_header,
          reg_type(1)       TYPE n VALUE '1',                      " Tipo Registro
          group_code(12)    TYPE c,
 END OF ti_mercantil_header.

G_CODE = 'BAMRVECA'.

V_LEN = STRLEN( G_CODE ).
DESCRIBE FIELD G_CODE LENGTH V_LONG IN CHARACTER MODE.

V_LEN = V_LONG - V_LEN.

DO V_LEN TIMES.
   CONCATENATE G_CODE ' '  INTO G_CODE RESPECTING BLANKS.
ENDDO.

ti_mercantil_header-group_code = G_CODE.

Que puedo verificar.
Muchas Gracias

Ana

prueba concatenate g_code into g_code separatec by space

1 me gusta

Prueba este código

REPORT z_campo_espacios.

DATA: cadenae(12) TYPE c,
cadenas TYPE string,
spacio(12) TYPE c,
v_spacio TYPE i,
v_long TYPE i.

cadenae = ‘12345678’.
spacio = ’ '. " espacios del largo del campo 12 espacios
v_long = STRLEN( cadenae ).
v_spacio = 12 - v_long.
CONCATENATE cadenae spacio+0(v_spacio) ‘funciona’ INTO cadenas RESPECTING BLANKS.

WRITE cadenas.

Cambie el código por el siguiente por que al concatenar con RESPECTING BLANKS nos inserta espacios entre los campos.

DATA: cadenae(12) TYPE c,
cadenas TYPE string,
spacio(12) TYPE c,
v_spacio TYPE i,
v_long TYPE i.

cadenae = ‘123456789’.
spacio = ‘############’.
*spacio = ’ '. " espacios del largo del campo 12 espacios
v_long = STRLEN( cadenae ).
v_spacio = 12 - v_long.
CONCATENATE cadenae spacio+0(v_spacio) INTO cadenas.

WRITE: cadenas. WRITE ‘funciona’.
TRANSLATE cadenas USING '# '.
WRITE: / cadenas. WRITE ‘funciona’.

Creo que este se adapta mejor.

1 me gusta

Muchas gracias, una pregunta pero el debe dejar 4 espacios luego que imprima la palabra.

Entonces en mi caso quedaria asi?
ATA: cadenae(12) TYPE c,
cadenas TYPE string,
spacio(12) TYPE c,
v_spacio TYPE i,
v_long TYPE i.

cadenae = ‘BAMRVECA’.
spacio = ’ '.
v_long = STRLEN( cadenae ).
v_spacio = 12 - v_long.
CONCATENATE cadenae spacio+0(v_spacio) ‘funciona’ INTO cadenas RESPECTING BLANKS.

WRITE cadenas.

@aalvarez2605 mira antes me toco hacer exactamente lo mismo, te tocar hacer una conversión Hexadecimal.

* DEFINICIÓN DE CONSTANTES
----------------------------------------------------------------------
CONSTANTS:
l_cte_space TYPE syhex02 VALUE ‘00a0’. " Value for space
----------------------------------------------------------------------

  •     DEFINICIÓN DE ESTRUCTURAS
    

----------------------------------------------------------------------
DATA:
l_es_caracter LIKE LINE OF g_r_caracteres.
----------------------------------------------------------------------

  •     DEFINICIÓN DE VARIABLES
    

----------------------------------------------------------------------
DATA:
l_i_cantidad TYPE i,
l_s_space TYPE string,
l_i_pos TYPE i.
----------------------------------------------------------------------

  •      Definición de Field Symbol
    

----------------------------------------------------------------------
FIELD-SYMBOLS <l_fs_linea> TYPE zttplano.
*…Se obtiene el formato del espacio
l_s_space = cl_abap_conv_in_ce=>uccp( l_cte_space ).

DO l_i_cantidad TIMES.
<l_fs_linea>+l_i_pos(1) = l_s_space.
*…Se aumenta la posición
l_i_pos = l_i_pos + 1.
ENDDO.

Dentro del DO se agrega los espacios en blanco necesarios

Muchas Gracias a todos, por su apyo, al final lo resolvi, agregando 4 campos type c (1 por cada espacio que necesitaba) en mi estructura de mi tabla. Quedando como lo necesitaba: el campo texto de 8 long y luego los 4 campos de q caracter almacenadno en mi estructura de salida.
DATA: BEGIN OF ti_mercantil_header,
reg_type(1) TYPE n VALUE ‘1’, " Tipo Registro
group_code(8) TYPE c VALUE ‘BAMRVECA’ , " Identificación del Banco
space1 TYPE c,
space2 TYPE c,
space3 TYPE c,
space4 TYPE c,
END OF ti_mercantil_header.

e_dtam100h-h00 = ti_mercantil_header.
e_dtam100h-h01 = 400.

Nuevamente Muchas Gracias a todos.

Saludos

Ana

1 me gusta

Perfecto! marca tu respuesta como solución así cerramos el tema.

Gracias!

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.