#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
Ayuda
Hola jhon Cano,
Adjunta tu código para poder ayudarte.
__________________
Saludos Cordiales |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
Hola Mario
estoy realizando una prueba con batch input, y aun no manejo la tecnica de insert directo a la tabla z. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|