MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 19/03/08, 21:27:25
Fab_Bajio Fab_Bajio is offline
Junior Member
 
Fecha de Ingreso: ene 2008
Mensajes: 12
Question Carga de Archivos de texto por posicion con CALL FUNCTION 'UPLOAD'

Hola a todos ojala me puedan ayudar esto me urge realmente, me pordrian decir como hacer para cargar un archivo de texto plano a una IT por medio de CALL FUNCTION 'UPLOAD', dicho archivo no esta delimitado con tab ni pipes, ni comas ya que la creacion del archivo esta por posicion y asi lo tengo que leer pongo las tres lineas que repiten en el archivo N veces con diferentes registros ojala puedan apoyarme
Responder Con Cita
  #2  
Viejo 19/03/08, 21:58:11
salinasa salinasa is offline
Junior Member
 
Fecha de Ingreso: mar 2008
Mensajes: 1
Thumbs up

REPORT ZBI_MOMM.

TABLES: RF02K, LFA1, LFB1.

DATA: V_NOMBRE(50) TYPE C, " NOMBRE PROPUESTO PARA EL LOG FILE
V_CONTA TYPE I. " CONTADOR DE REGISTROS PROCESADOS

* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

* ARCHIVO DE ENTRADA
DATA: BEGIN OF ITFILE OCCURS 0,
BUKRS LIKE RF02K-BUKRS,
KTOKK LIKE RF02K-KTOKK,
NAME1 LIKE LFA1-NAME1,
SORTL LIKE LFA1-SORTL,
ORT01 LIKE LFA1-ORT01,
PSTLZ LIKE LFA1-PSTLZ,
LAND1 LIKE LFA1-LAND1,
SPRAS LIKE LFA1-SPRAS,
AKONT LIKE LFB1-AKONT,
FDGRV LIKE LFB1-FDGRV,
ZTERM LIKE LFB1-ZTERM,
ZWELS LIKE LFB1-ZWELS,
REPRF LIKE LFB1-REPRF,
END OF ITFILE.

* LOG DE SALIDA
DATA: BEGIN OF ITLOG OCCURS 0,
TEXTO(100),
END OF ITLOG.


* =====================================================================
* >>> PANTALLA DE SELECCIÓN
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01.
PARAMETERS:
P_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:\BI TEST.txt' OBLIGATORY,
P_CARP LIKE RLGRAP-FILENAME DEFAULT 'C:\' OBLIGATORY,
P_LOGF(50) TYPE C OBLIGATORY. "TYPE STRING OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B01.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',*.*,*.*.'
MODE = 'O'
TITLE = ' '
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARP.
CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
EXPORTING
WINDOW_TITLE = 'Seleccione una carpeta'
IMPORTING
SELECTED_FOLDER = P_CARP
EXCEPTIONS
CNTL_ERROR = 1
OTHERS = 2.


AT SELECTION-SCREEN OUTPUT.
CONCATENATE 'Log_Carga_MIC_'
SY-DATUM
'_'
SY-UZEIT
'.txt'
INTO V_NOMBRE.
P_LOGF = V_NOMBRE.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_LOGF'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.



START-OF-SELECTION.
PERFORM CARGAR_ARCHIVO.
IF ITFILE[] IS NOT INITIAL.
LOOP AT ITFILE.
PERFORM CARGAR_MIC.
PERFORM GUARDAR_LOG.
CLEAR BDCDATA.
REFRESH BDCDATA.
CLEAR MESSTAB.
REFRESH MESSTAB.
ENDLOOP.
IF ITLOG[] IS NOT INITIAL.
PERFORM BAJAR_LOG.
IF SY-SUBRC = 0.
MESSAGE S001(00) WITH V_CONTA ' registros procesados.'
' Revise log en ' P_LOGF.
ELSE.
MESSAGE S001(00) WITH V_CONTA ' registros procesados.'
'Error al guardar archivo log.'.
ENDIF.
ELSE.
MESSAGE S001(00) WITH V_CONTA ' registros procesados.'.
ENDIF.
ELSE.
MESSAGE S001(00) WITH 'No se encontraron registros en el'
'archivo de entrada.'.
ENDIF.
* <<< PANTALLA DE SELECCIÓN
* =====================================================================



*************************************************************************
* >>> SUBRUTINAS ********************************************************
* =====================================================================
* CARGAR_ARCHIVO
* =====================================================================
FORM CARGAR_ARCHIVO.

DATA V_FILE LIKE RLGRAP-FILENAME. " TYPE STRING.

V_FILE = P_FILE.

* CALL FUNCTION 'GUI_UPLOAD'
* EXPORTING
* FILENAME = V_FILE
* FILETYPE = 'DAT'
* TABLES
* DATA_TAB = ITFILE
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* NO_AUTHORITY = 6
* UNKNOWN_ERROR = 7
* BAD_DATA_FORMAT = 8
* HEADER_NOT_ALLOWED = 9
* SEPARATOR_NOT_ALLOWED = 10
* HEADER_TOO_LONG = 11
* UNKNOWN_DP_ERROR = 12
* ACCESS_DENIED = 13
* DP_OUT_OF_MEMORY = 14
* DISK_FULL = 15
* DP_TIMEOUT = 16
* OTHERS = 17.
*
* IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.

CALL FUNCTION 'WS_UPLOAD'
EXPORTING
* CODEPAGE = ' '
FILENAME = V_FILE
FILETYPE = 'DAT'
* HEADLEN = ' '
* LINE_EXIT = ' '
* TRUNCLEN = ' '
* USER_FORM = ' '
* USER_PROG = ' '
* DAT_D_FORMAT = ' '
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = ITFILE
* EXCEPTIONS
* CONVERSION_ERROR = 1
* FILE_OPEN_ERROR = 2
* FILE_READ_ERROR = 3
* INVALID_TYPE = 4
* NO_BATCH = 5
* UNKNOWN_ERROR = 6
* INVALID_TABLE_WIDTH = 7
* GUI_REFUSE_FILETRANSFER = 8
* CUSTOMER_ERROR = 9
* NO_AUTHORITY = 10
* OTHERS = 11
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.



ENDFORM. " CARGAR_ARCHIVO
* =====================================================================


* =====================================================================
* CARGAR_MIC
* =====================================================================
FORM CARGAR_MIC.

DATA: V_TCODE LIKE SY-TCODE VALUE 'FK01',
V_UPDT LIKE CTU_PARAMS-UPDMODE VALUE 'A',
"S: synchronously
"A: asynchronously
"L: local
V_MODO LIKE CTU_PARAMS-DISMODE VALUE 'N'.
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro

* PANTALLA 1
PERFORM bdc_dynpro USING 'SAPMF02K' '0105'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
perform bdc_field using 'RF02K-BUKRS' ITFILE-BUKRS.
perform bdc_field using 'RF02K-KTOKK' ITFILE-KTOKK.

* PANTALLA 2
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
PERFORM bdc_field USING 'LFA1-NAME1' ITFILE-NAME1.
PERFORM bdc_field USING 'LFA1-SORTL' ITFILE-SORTL.
PERFORM bdc_field USING 'LFA1-ORT01' ITFILE-ORT01.
PERFORM bdc_field USING 'LFA1-PSTLZ' ITFILE-PSTLZ.
PERFORM bdc_field USING 'LFA1-LAND1' ITFILE-LAND1.
PERFORM bdc_field USING 'LFA1-SPRAS' ITFILE-SPRAS.

* PANTALLA 3
perform bdc_dynpro using 'SAPMF02K' '0120'.
perform bdc_field using 'BDC_OKCODE' '=VW'.

* PANTALLA 4
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_OKCODE' '=VW'.

* PANTALLA 5
perform bdc_dynpro using 'SAPMF02K' '0210'.
perform bdc_field using 'BDC_OKCODE' '=VW'.
perform bdc_field using 'LFB1-AKONT' ITFILE-AKONT.
perform bdc_field using 'LFB1-FDGRV' ITFILE-FDGRV.

* PANTALLA 6
PERFORM bdc_dynpro USING 'SAPMF02K' '0215'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPDA'.
PERFORM bdc_field USING 'LFB1-ZTERM' ITFILE-ZTERM.
PERFORM bdc_field USING 'LFB1-REPRF' ITFILE-REPRF.
PERFORM bdc_field USING 'LFB1-ZWELS' ITFILE-ZWELS.

CALL TRANSACTION V_TCODE USING BDCDATA
MODE V_MODO
UPDATE V_UPDT
MESSAGES INTO MESSTAB.

V_CONTA = V_CONTA + 1.

ENDFORM. " CARGAR_MIC
* =====================================================================


* =====================================================================
* GUARDAR_LOG
* =====================================================================
FORM GUARDAR_LOG.

DATA: V_TEXTO LIKE T100-TEXT,
V_MSID LIKE SY-MSGID,
V_MSGNO LIKE SY-MSGNO,
V_MSGV1 LIKE SY-MSGV1,
V_MSGV2 LIKE SY-MSGV2,
V_MSGV3 LIKE SY-MSGV3,
V_MSGV4 LIKE SY-MSGV4.

LOOP AT MESSTAB.

V_MSID = MESSTAB-MSGID.
V_MSGNO = MESSTAB-MSGNR.
V_MSGV1 = MESSTAB-MSGV1.
V_MSGV2 = MESSTAB-MSGV2.
V_MSGV3 = MESSTAB-MSGV3.
V_MSGV4 = MESSTAB-MSGV4.

CALL FUNCTION 'TB_MESSAGE_BUILD_TEXT'
EXPORTING
LANGU = SY-LANGU
MSGID = V_MSID
MSGNO = V_MSGNO
MSGV1 = V_MSGV1
MSGV2 = V_MSGV2
MSGV3 = V_MSGV3
MSGV4 = V_MSGV4
IMPORTING
TEXT = V_TEXTO.

IF SY-SUBRC = 0 AND V_TEXTO IS NOT INITIAL.
ITLOG-TEXTO = V_TEXTO.
APPEND ITLOG.
CLEAR ITLOG.
ENDIF.

ENDLOOP.

ENDFORM. " GUARDAR_LOG
* =====================================================================


* =====================================================================
* BAJAR_LOG
* =====================================================================
FORM BAJAR_LOG.


DATA: LV_VAR TYPE STRING.

CONCATENATE P_CARP '\' P_LOGF INTO P_LOGF.
LV_VAR = P_LOGF.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_VAR
FILETYPE = 'DAT'
TABLES
DATA_TAB = ITLOG
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.

ENDFORM. " BAJAR_LOG
* =====================================================================


* <<< SUBRUTINAS ********************************************************
*************************************************************************




*** >> Rutinas para generar BDC ***************************************
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.

*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
*** << Rutinas para generar BDC ***************************************

Aqui tienes un ejemplo que realiza un batch input espero y te sirca suerte
Responder Con Cita
  #3  
Viejo 24/03/08, 17:53:45
Fab_Bajio Fab_Bajio is offline
Junior Member
 
Fecha de Ingreso: ene 2008
Mensajes: 12
Salinasa primero qeu nada muchas gracias, tengo una duda lo que pasa es que no soy muy experto en programacion ABAP, he visto algunos codigos de carga de archivos a tablas IT pero basicamente mi problema es cargar una archivo no delimitado por espacios ni tabulaciones etc... en el codigo que hicsite favor de agregar no enceuntro la parte en la que esta leyendo por posicion ojala me puedas decir que que parte esta , de cualquier forma GRACIAS!!
Responder Con Cita
  #4  
Viejo 24/03/08, 20:32:58
isratol isratol is offline
Member
 
Fecha de Ingreso: jul 2007
Mensajes: 63
Talking

Tal vez puedas guardar cada registro de datos en una tabla interna, en un solo campo y si ya sabes como estan acomodados los datos en el registro, irlos separando, masomenos asi:

v_waers = bkpf-bktxt+v_longitud(3).
it_movs-creobien = bkpf-bktxt+v_longitud(1).

v_waers = bkpf-bktxt+2(3). --> empieza en la posicion 2 de la cadena, y te toma los siguientes 3 caracteres.

Espero q sea eso a lo que te refieras...

Saludos
__________________
Israel Toledo
Responder Con Cita
  #5  
Viejo 24/03/08, 21:57:27
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
Hola, supongamos que tienes esto en tu txt..

PELIM0103200701052008

Y tienes que guardarlo en una tabla interna en la que los campos son

land1 -> Pais
regio -> Region
Date1 -> Fecha1
Date 2 -> Fecha 2

Nunca lo he probado pero estoy seguro que resultara, create una variable de esta manera teniendo en cuenta el numero de caracteres de cada campo
TYPES: BEGIN OF ty_tab,
land1(2),
regio(3),
date1(8),
date2(8),
END OF ty_carga.

TYPES: BEGIN OF ty_carga,
line1(21), "Para el ejemplo es 21
END OF ty_carga.

DATA: ti_tab TYPE TABLE OF ty_tab WITH HEADER LINE,
ti_carga TYPE TABLE OF ty_carga WITH HEADER LINE.

Ahi estoy creando 2 tablas internas, uno para la carga y otra para la conversion, tendrias que hacer el GUI_UPLOAD a la tabla interna ti_carga y lo que despues tendrias que hacer es esto

ti_tab[] = ti_carga[].

Porque al final SAP siempre trabaja las estructuras como una cadena separadas por una longuitud del atributo del campo ... espero te sirva
__________________
David Carballido Córdova
Responder Con Cita
  #6  
Viejo 25/03/08, 13:05:46
abapconsultoria abapconsultoria is offline
Senior Member
 
Fecha de Ingreso: ene 2008
Mensajes: 101
La funcion GUI_UPLOAD tiene el parametro 'HAS_FIELD_SEPARATOR' aqui mando la descripcion. Lo que intentas hacer es levantar todo el archivo linea por linea como si tuviera un unico campo ??

Con respecto a las posiciones.... En este caso te recomendaria que te armes una variable(estructura) a modo de plantilla de como vas a leer las posiciones y despues asignes linea por linea de la tabla levantada a esa variable(estructura) y leas tus posiciones desde ahi.

Saludos.

Javier.


FU GUI_UPLOAD HAS_FIELD_SEPARATOR
____________________________________________________
Txt.brv.
Columns Separated by Tabs in Case of ASCII Upload

Description
Specifies if the fields in the file are separated by a tab. This is necessary if the structure passed contains several components. CR/LF occurs instead of a tab after the last field of a row.

Value range
'X': Fields are separated by tabs.
SPACE: Fields are not separated by tabs. In this case, the table must
contain either only one single column or all columns must be contained
in the file in their full length.
Default
SPACE

Módulo funciones
GUI_UPLOAD
__________________




Lo importante no es saber sino saber quien es el que sabe
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 21:06:31.


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