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 11/08/14, 20:29:53
jhon Cano jhon Cano is offline
Junior Member
 
Fecha de Ingreso: ago 2014
Mensajes: 5
Cargas masivas

buenas tardes para todos

cree un programa que permite cargar masiva-mente unos registros a una tabla Z, por call transaction y al cargar el txt, al consultar la tabla los datos aparecen desordenados y en un solo campo, que puede estar pasando?

estoy atento a sus comentarios, muchas gracias
Responder Con Cita
  #2  
Viejo 11/08/14, 21:32:49
MarioMoralesG MarioMoralesG is offline
Junior Member
 
Fecha de Ingreso: ago 2014
Localización: Lima, Perú
Mensajes: 10
Ayuda

Hola jhon Cano,

Adjunta tu código para poder ayudarte.
__________________
Saludos Cordiales
Responder Con Cita
  #3  
Viejo 12/08/14, 14:30:19
jhon Cano jhon Cano is offline
Junior Member
 
Fecha de Ingreso: ago 2014
Mensajes: 5
código

Hola Mario M.
este es el código

REPORT ZPRUEBA_BATCH_INPUT.

*----------------------------------------------------------------------*
* Declaracion de includes
*----------------------------------------------------------------------*
TYPE-POOLS: slis.

* Tabla del BI con la estructura de BDCDATA
DATA: BEGIN OF ti_bdc_data OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF ti_bdc_data.

* Estructura del BI
DATA: st_bdc_data TYPE bdcdata.

* Tabla de mensajes
DATA: BEGIN OF ti_messages OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF ti_messages.

* Estructura de mensajes
DATA: st_messages TYPE bdcmsgcoll.

* Tabla de usuarios
DATA: ti_archivo TYPE STANDARD TABLE OF ztabla_cliente,
st_archivo LIKE LINE OF ti_archivo.

* Tabla de errores
DATA: BEGIN OF ti_errores OCCURS 0,
dni_cedula TYPE z_dni,
descripcion(100) TYPE c,
END OF ti_errores.

* Estructura de errores
DATA: st_errores LIKE LINE OF ti_errores.

* Variables
DATA: v_mensaje(100) TYPE c,
v_error(1) TYPE c,
v_cod_trans(4) TYPE c VALUE 'SM30',
v_modo(1) TYPE c,
v_update(1) TYPE c,
v_titulo LIKE sy-title,
v_campo(35) TYPE c,
v_indice(2) TYPE c,
v_repid LIKE sy-repid,
v_msg_id LIKE t100-arbgb,
v_msg_no LIKE t100-msgnr,
v_msg_v1 LIKE balm-msgv1,
v_msg_v2 LIKE balm-msgv2,
v_msg_v3 LIKE balm-msgv3,
v_msg_v4 LIKE balm-msgv4,
v_procesados_ok TYPE i,
v_procesados_error TYPE i,
v_procesados TYPE i,
v_reg(10) TYPE c,
v_dni LIKE ztabla_cliente-dni_cedula.

* Tablas y estructuras del ALV
DATA: st_layout TYPE slis_layout_alv,
ti_fieldcat TYPE slis_t_fieldcat_alv,
st_fieldcat TYPE slis_fieldcat_alv,
ti_header TYPE slis_t_listheader,
st_header TYPE slis_listheader.

*--------------------------------------------------------------------*
* Pantalla de selección
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK z1 WITH FRAME TITLE text-007.
* Archivo de entrada
PARAMETERS: p_path LIKE rlgrap-filename.

SELECTION-SCREEN BEGIN OF BLOCK z2 WITH FRAME TITLE text-008.
* Modo procesamiento BI
PARAMETER: p_a RADIOBUTTON GROUP rb2,
p_n RADIOBUTTON GROUP rb2.
SELECTION-SCREEN END OF BLOCK z2.

SELECTION-SCREEN BEGIN OF BLOCK z3 WITH FRAME TITLE text-008.
* Modo Actualización BI
PARAMETER: p_asin RADIOBUTTON GROUP rb3,
p_sin RADIOBUTTON GROUP rb3.
SELECTION-SCREEN END OF BLOCK z3.

SELECTION-SCREEN END OF BLOCK z1.

*--------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
*--------------------------------------------------------------------*
* Abrir ventana de archivos
PERFORM abrir_ventana_archivos.

*--------------------------------------------------------------------*
START-OF-SELECTION.
*--------------------------------------------------------------------*
* Levanto el archivo de entrada
PERFORM levantar_archivo_entrada.

* Procesamiento de los datos
PERFORM procesamiento_datos.

*--------------------------------------------------------------------*
END-OF-SELECTION.
*--------------------------------------------------------------------*
* Listado de errores si los hay
PERFORM listado_errores.


*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING dyn_begin TYPE c
campo1
campo2.
CLEAR st_bdc_data.

IF dyn_begin = 'X'.
st_bdc_data-program = campo1.
st_bdc_data-dynpro = campo2.
st_bdc_data-dynbegin = dyn_begin.
ELSE.
st_bdc_data-fnam = campo1.
st_bdc_data-fval = campo2.
ENDIF.

APPEND st_bdc_data TO ti_bdc_data.

ENDFORM. " bdc_field
*&---------------------------------------------------------------------*
*& Form LEVANTAR_ARCHIVO_ENTRADA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM levantar_archivo_entrada .

DATA: vl_file TYPE string.

IF p_path IS INITIAL.
MESSAGE s000(z_prueba) WITH text-003.
ELSE.

vl_file = p_path.

* Se abre el archivo de entrada para lectura
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = vl_file
filetype = 'ASC'
has_field_separator = ''
CHANGING
data_tab = ti_archivo[]
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
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.

IF sy-subrc NE 0.
MESSAGE e000(z_prueba) WITH text-004.
ENDIF.

IF ti_archivo[] IS INITIAL.
MESSAGE s000(z_prueba) WITH text-005.
ENDIF.

ENDIF.

ENDFORM. " LEVANTAR_ARCHIVO_ENTRADA
*&---------------------------------------------------------------------*
*& Form CARGO_TABLA_BDCDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cargo_tabla_bdcdata .

CLEAR: ti_bdc_data, ti_messages.
REFRESH: ti_bdc_data, ti_messages.

* Ingreso a la Primer pantalla y presiono boton de mantenimiento
PERFORM bdc_field USING 'X' 'SAPMSVMA' '0100'.
PERFORM bdc_field USING ' ' 'VIEWNAME' 'ZTABLA_CLIENTE'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=UPD'.

* Presiono boton de nuevas entradas
PERFORM bdc_field USING 'X' 'SAPLZTABLA_CLIENTE' '0001'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=NEWL'.

ADD 1 TO v_indice.
PERFORM completo_ceros_izq.

* Cargo datos del usuario
PERFORM bdc_field USING 'X' 'SAPLZTABLA_CLIENTE' '0001'.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-DNI_CEDULA(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-dni_cedula.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-NOMBRE_A(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-nombre_a.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-NOMBRE_EMPRESA(' v_indice ')'INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-nombre_empresa.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-DIRECCION(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-direccion.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-CIUDAD_A(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-ciudad_a.

CLEAR v_campo.
CONCATENATE 'ZTABLA_CLIENTE-PAIS(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-pais.

* Grabo los Registros
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=SAVE'.

* Cierro la segunda pantalla
PERFORM bdc_field USING 'X' 'SAPLZTABLA_CLIENTE' '0001'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '=ENDE'.

* Cierro la primer pantalla
PERFORM bdc_field USING 'X' 'SAPMSVMA' '0100'.
PERFORM bdc_field USING ' ' 'BDC_OKCODE' '/EENDE'.
ENDFORM. " CARGO_TABLA_BDCDATA
*&---------------------------------------------------------------------*
*& Form ABRIR_VENTANA_ARCHIVOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM abrir_ventana_archivos .

DATA: tl_filetable TYPE filetable,
stl_file_table TYPE file_table,
vl_rc TYPE i.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
default_filename = '*'
CHANGING
rc = vl_rc
file_table = tl_filetable.

READ TABLE tl_filetable INDEX 1 INTO stl_file_table.

IF sy-subrc EQ 0.
MOVE stl_file_table TO p_path.
ENDIF.

ENDFORM. " ABRIR_VENTANA_ARCHIVOS
*&---------------------------------------------------------------------*
*& Form PROCESAMIENTO_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM procesamiento_datos.

IF NOT ti_archivo[] IS INITIAL.

CLEAR: v_procesados_error,
v_procesados_ok.

LOOP AT ti_archivo INTO st_archivo.

* Verificamos si es registro a insertar ya existe en la tabla, si es
* asi continuamos con el siguiente
CLEAR v_dni.
SELECT SINGLE dni_cedula
FROM ztabla_cliente
INTO v_dni
WHERE dni_cedula EQ st_archivo-dni_cedula.

IF sy-subrc EQ 0.

CLEAR st_errores.
st_errores-dni_cedula = st_archivo-dni_cedula.
CONCATENATE 'El DNI'
st_archivo-dni_cedula'ya existe en ZTABLA_USUARIOS '
INTO st_errores-descripcion.
APPEND st_errores TO ti_errores.

* Continuamos con el proximo registro de TI_ARCHIVO
CONTINUE.

ENDIF.

* Carga de la tabla BDCDATA
PERFORM cargo_tabla_bdcdata.

* Realizo el Call transaction a la SM30
PERFORM call_sm30.

IF v_error IS INITIAL.

ADD 1 TO v_procesados_ok.

ELSE.

* Recupero los mensajes de error
READ TABLE ti_messages INDEX 1 INTO st_messages.

CLEAR: ti_errores, st_errores.
st_errores-descripcion = text-002.

IF sy-subrc = 0.
v_msg_id = st_messages-msgid .
v_msg_no = st_messages-msgnr.
v_msg_v1 = st_messages-msgv1.
v_msg_v2 = st_messages-msgv2.
v_msg_v3 = st_messages-msgv3.
v_msg_v4 = st_messages-msgv4.

CALL FUNCTION 'MESSAGE_PREPARE'
EXPORTING
msg_id = v_msg_id
msg_no = v_msg_no
msg_var1 = v_msg_v1
msg_var2 = v_msg_v2
msg_var3 = v_msg_v3
msg_var4 = v_msg_v4
IMPORTING
msg_text = v_mensaje
EXCEPTIONS
function_not_completed = 1
message_not_found = 2
OTHERS = 3.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CLEAR st_errores.
st_errores-descripcion = v_mensaje.

ENDIF.

st_errores-dni_cedula = st_archivo-dni_cedula.
APPEND st_errores TO ti_errores.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM. " PROCESAMIENTO_DATOS
*&---------------------------------------------------------------------*
*& Form CALL_SM30
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_sm30 .

CLEAR: ti_messages, v_error.
REFRESH ti_messages.

* Modo de procesamiento
IF p_a = 'X'.
v_modo = 'A'.
ELSE.
v_modo = 'N'.
ENDIF.

* Modo de actualización
IF p_asin = 'X'.
v_update = 'A'.
ELSE.
v_update = 'N'.
ENDIF.

* Call transaction
CALL TRANSACTION v_cod_trans USING ti_bdc_data MODE v_modo UPDATE
v_update
MESSAGES INTO ti_messages.

IF NOT sy-subrc IS INITIAL.
v_error = 'X'.
ENDIF.

ENDFORM. " CALL_SM30
*&---------------------------------------------------------------------*
*& Form LISTADO_ERRORES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM listado_errores .

* Seteo del layout de salida del listado.
PERFORM layout_alv.

* Seteo de las columnas a mostrar
PERFORM fieldcat_alv.

* Impresión de los comentarios en la cabecera
PERFORM cabecera_alv.

v_repid = sy-repid.

* ALV Grid
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_structure_name = 'TI_ERRORES'
is_layout = st_layout
it_fieldcat = ti_fieldcat[]
TABLES
t_outtab = ti_errores
EXCEPTIONS
program_error = 1
OTHERS = 2.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " LISTADO_ERRORES
*&---------------------------------------------------------------------*
*& Form LAYOUT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM layout_alv .

* Seteo de la Visualización.
st_layout-zebra = 'X'. " Rayado de lineas
st_layout-no_min_linesize = 060. " Tamaño líneas en la página.
st_layout-min_linesize = sy-linsz. " Mínima long de la linea.
st_layout-max_linesize = sy-linsz. " Máxima long de la linea.

ENDFORM. " LAYOUT_ALV
*&---------------------------------------------------------------------*
*& Form FIELDCAT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fieldcat_alv .

* Dni
CLEAR st_fieldcat.
st_fieldcat-fieldname = 'DNI'.
st_fieldcat-tabname = 'TI_ERRORES'.
st_fieldcat-seltext_l = 'DNI'.
st_fieldcat-seltext_m = 'DNI'.
st_fieldcat-seltext_s = 'DNI'.
st_fieldcat-outputlen = 10.
APPEND st_fieldcat TO ti_fieldcat.

* Descripcion
CLEAR st_fieldcat.
st_fieldcat-fieldname = 'DESCRIPCION'.
st_fieldcat-tabname = 'TI_ERRORES'.
st_fieldcat-seltext_l = 'DESCRIPCION'.
st_fieldcat-seltext_m = 'DESCRIPCION'.
st_fieldcat-seltext_s = 'DESCRIPCION'.
st_fieldcat-outputlen = 40.
APPEND st_fieldcat TO ti_fieldcat.

ENDFORM. " FIELDCAT_ALV
*&---------------------------------------------------------------------*
*& Form CABECERA_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cabecera_alv .

* Impresión stantandar para los títulos y comentarios
v_titulo = text-030.
REFRESH ti_header.

* Impresión del Título de la lista - 'H'.
CLEAR st_header.
st_header-typ = 'H'.
st_header-info = v_titulo.
APPEND st_header TO ti_header.

* Registros procesados
CLEAR st_header.
st_header-typ = 'S'.

CLEAR: v_procesados, v_reg.
DESCRIBE TABLE ti_archivo LINES v_procesados.

v_reg = v_procesados.
CONCATENATE 'CANTIDAD DE REGISTROS PROCESADOS: ' v_reg
INTO st_header-info.

CONDENSE st_header-info.
APPEND st_header TO ti_header.

* Registros procesados OK
CLEAR st_header.
st_header-typ = 'S'.

CLEAR v_reg.
v_reg = v_procesados_ok.
CONCATENATE 'CANTIDAD DE REGISTROS PROCESADOS OK: ' v_reg
INTO st_header-info.

CONDENSE st_header-info.
APPEND st_header TO ti_header.

* Registros Erroneos
CLEAR st_header.
st_header-typ = 'S'.

CLEAR v_procesados_error.
DESCRIBE TABLE ti_errores LINES v_procesados_error.

v_reg = v_procesados_error.
CONCATENATE 'CANTIDAD DE REGISTROS PROCEDADOS CON ERROR: ' v_reg
INTO st_header-info.

CONDENSE st_header-info.
APPEND st_header TO ti_header.

ENDFORM. " CABECERA_ALV
*&---------------------------------------------------------------------*
*& Form COMPLETO_CEROS_IZQ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM completo_ceros_izq .

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = v_indice
IMPORTING
output = v_indice.

ENDFORM. " COMPLETO_CEROS_IZQ
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = ti_header.

ENDFORM. "top_of_page
Responder Con Cita
  #4  
Viejo 13/08/14, 21:23:50
MarioMoralesG MarioMoralesG is offline
Junior Member
 
Fecha de Ingreso: ago 2014
Localización: Lima, Perú
Mensajes: 10
Ayuda

Hola jhon Cano,

Una consulta porque utilizas la técnica de batch input y no un insert directo a la tabla z.
__________________
Saludos Cordiales
Responder Con Cita
  #5  
Viejo 21/08/14, 20:23:18
jhon Cano jhon Cano is offline
Junior Member
 
Fecha de Ingreso: ago 2014
Mensajes: 5
Hola Mario

estoy realizando una prueba con batch input, y aun no manejo la tecnica de insert directo a la tabla z.
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 02:35:43.


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