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.