MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Espacios a la derecha archivo TXT (foro/showthread.php?t=12796)

vsuarezo 21/04/08 19:42:57

Espacios a la derecha archivo TXT
 
Buenas tardes,

Tengo definida una ta bla interna REC de la siguiente forma:

DATA: BEGIN OF REG OCCURS 100,
CAMPO(100) TYPE C,
END OF REG.

y otra ADIC así:

DATA: BEGIN OF ADIC OCCURS 100,
TIPO_REG(1) TYPE N VALUE 3,
NUM_FAC(10) TYPE C,
REFER(10) TYPE C,
SIG_BRU(1) TYPE C,
VAL_BRU(10) TYPE N,
SIG_AJUS(1) TYPE C,
VAL_AJUS(10) TYPE N,
SIG_NET(1) TYPE C,
VAL_NET(10) TYPE N,
FILLER(41) TYPE C VALUE SPACE,
END OF ADIC.

Con el siguiente código, paso el contenido de ADIC a REG:

CLEAR REG.
REG = ADIC.
APPEND REG.

El conenido de FILLER son espacioes en blanco.
¿Que debo hacer para que cuando pase el contenido de ADIC a REG se conserven los espacios en blanco del campo FILLER?.

Muchas Gracias

Edd_401 24/04/08 17:17:12

No Entiendo Por Que Tiene El Space Dentro De Tu Tabla Interna O Para Que Lo Usas….

Y Por Que Tan Largo (41.)

Si Lo Que Desea Es Que Haya Un Espacio Entre Cada Uno De Tus Campos, Es Decir, Tabular….seria Asi:




Loop At Adic.
Clear Reg.

Concatenate
Adic- Tipo_reg
Adic- Num_fac
Adic- Refer
Adic- Sig_bru
Adic- Val_bru
Adic- Sig_ajus
Adic- Val_ajus
Adic- Sig_net
Adic- Val_net


Into Reg-campo Separated By Space.

Endloop.





O Puedes Declara Antes}

Data: Filler(41) Type C Default Space..

Y En La Ultima Parte Poner:



Into Reg-campo Separated By Filler.

vsuarezo 24/04/08 22:01:25

Espacios a la derecha archivo TXT
 
Aclarando un poco mas lo que necesito es que al generar un archivo plano a partir de una tabla interna, todas las líneas del archivo plano deben quedar de la misma longitud. Ej. Si genero el siguiente archivo plano donde el acho máximo es 15 caracteres.

XXXXXXXXXXXXXXX
YYYYYYYY
ZZZZZZZZZZZZZZZ

Necesito que la abrirlo en algún editor de textos, al recorrer caracter a caracter la línea de las Y, al llegar a la última Y no salte a la siguiente línea sino que me permita llegar a la posición 15 de esa línea. Es decir que me deje espacios en blanco a la derecha y me pueda desplazar sobre ellos.

Espero haber sido más claro.

No es muy común que se requieran espacios en blanco al final de una línea pero por algún tipo de validación requieren que este archivo los tenga.

Muchas gracias por su atención.

Dano 24/04/08 22:30:04

que tal.

Aqui tambien utilizamos la transferencia mediante archivos de texto y asi es como la manejamos.
Se declara la tabla interna con los caracteres necesarios:
DATA: BEGIN OF t_inter OCCURS 0,
line(225),
END OF t_inter.


se define la tabla donde se guardan los valores que necesitas:
DATA: BEGIN OF ti_inter OCCURS 10,
lifnr LIKE reguh-lifnr, " proveedor
zbnkn LIKE reguh-zbnkn, " Cta. Destino
blanc5(5) TYPE c, " espacio en blanco
ubknt LIKE reguh-ubknt, " Cta. Origen
blanc5_2(5) TYPE c, " espacio en blanco
rwbtr LIKE reguh-rwbtr, " Monto
blan_nom(30) TYPE c, " Información adicional para la transferencia.
blanc10(10) TYPE c, " espacio en blanco
laufd LIKE reguh-laufd, " Fecha de aplicación de la transferencia
END OF ti_inter.


Se declara una variable con los espacios necesarios.

DATA: line(93). " LINEA PARA BAJAR ARCHIVO.


Despues haces la asignacion de la tabla interna a la variable.

MOVE: ctaorig TO line,
ti_inter-blanc5 TO line+11(5),
ctadest TO line+16(11),
ti_inter-blanc5_2 TO line+27(5),
monto TO line+32(13),
ti_inter-blan_nom TO line+45(30),
ti_inter-blanc10 TO line+75(10),
ti_inter-laufd TO line+85(8).

MOVE line TO t_inter.
APPEND t_inter. CLEAR t_inter.



Y bajamos el archivo de texto con la función DOWNLOAD

CALL FUNCTION 'DOWNLOAD'
EXPORTING
filetype = 'ASC'
item = 'COMER_INTER'
IMPORTING
cancel = cancel
TABLES
data_tab = t_inter
EXCEPTIONS
invalid_filesize = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6
others = 7.


Saludos

miguelonibus 25/04/08 08:34:53

Yo probaria a hacer un CONCATENATE de todos los campos en la tabla REG

CONCATENATE
TIPO_REG
NUM_FAC
REFER
SIG_BRU
VAL_BRU
SIG_AJUS
VAL_AJUS
SIG_NET
VAL_NET
FILLER
INTO REG

APPEND REG.

Asi funcionaria.

Saludos.

vsuarezo 25/04/08 15:37:36

Espacios a la derecha archivo TXT
 
Probé con lo mencionado por DANO y por MIGUELONIBUS y aún no he podido resolver mi problema. De antemano muchas gracias

Este es un ejemplo más real resumido de lo que estoy haciendo:

PARAMETERS:
P_DSN1(40) TYPE C LOWER CASE DEFAULT '/sapusers/bancos/pcol'.

DATA: BEGIN OF REG OCCURS 100,
CAMPO(100) TYPE C,
END OF REG.

DATA: BEGIN OF ADIC OCCURS 100,
TIPO_REG(1) TYPE N VALUE 3,
NUM_FAC(10) TYPE C,
REFER(10) TYPE C,
SIG_BRU(1) TYPE C,
VAL_BRU(10) TYPE N,
SIG_AJUS(1) TYPE C,
VAL_AJUS(10) TYPE N,
SIG_NET(1) TYPE C,
VAL_NET(10) TYPE N,
FILLER(41) TYPE C VALUE SPACE,
END OF ADIC.

CLEAR ADIC.
ADIC-TIPO_REG = '3'.
ADIC-NUM_FAC = '0000000000'.
ADIC-REFER = '0000000000'.
ADIC-SIG_BRU = '+'.
ADIC-VAL_BRU = '0000000000'.
ADIC-SIG_AJUS = '+'.
ADIC-VAL_AJUS = '0000000000'.
ADIC-SIG_NET = '+'.
ADIC-VAL_NET = ‘125000000’.
ADIC-FILLER = ‘TABORDA TAMAYO NELSON HERNAN ‘.

APPEND ADIC.

CLEAR REG.
REG = ADIC.
APPEND REG.

CONCATENATE P_DSN1 SY-DATUM+4(2) SY-DATUM+6(2) '.txt' INTO P_DSN1.

OPEN DATASET P_DSN1 FOR OUTPUT IN TEXT MODE.
LOOP AT REG.
TRANSFER REG-CAMPO TO P_DSN1.
ENDLOOP.

CLOSE DATASET P_DSN1.

Observen que el campo ADIC-FILLER tiene espacios en blanco al final. Estos son los que quiero que me queden en el archivo plano. Los espacios en blanco que puedan llegar a existir entre los diferentes campos sí los esta conservando.

Nuevamente muchas gracias

karinastolen 02/03/11 23:32:19

usa RESPECTING BLANKS
 
Yo tenía un problema similar y lo solucioné como menciona miguelonibus sólo que utilicé el CONCATENATE con la opción RESPECTING BLANKS.

luis999 04/03/11 18:54:06

Quiza te sirve lo siquiente:

TYPES: text3 TYPE c LENGTH 101.

DATA: T_CONT TYPE TABLE OF text3.
DATA: BEGIN OF IT_CONT OCCURS 0,
DATO(101) TYPE C.
DATA: END OF IT_CONT.

DATA: BEGIN OF IT_EXPORT OCCURS 0,
DATO TYPE STRING.
DATA: END OF IT_EXPORT.


.................
llenas los datos
.................
IT_CONT-DATO+18(15) = VL_WRBTRT.
*Cantidad de registros de beneficiarios
IT_CONT-DATO+33(15) = '000000000000000'.
*Cantidad de registros enviados
IT_CONT-DATO+48(15) = LINEASTC.


APPEND IT_CONT-DATO TO T_CONT.
concatenate LINES OF T_CONT into IT_EXPORT-dato respecting blanks.

APPEND IT_EXPORT.
CLEAR IT_EXPORT.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_filename
filetype = 'ASC'
* trunc_trailing_blanks = ' '
trunc_trailing_blanks_eol = ' ' "Deja los espacios en blanco
TABLES
data_tab = IT_EXPORT.


Husos Horarios son GMT. La hora en este momento es 02:25:42.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web