#1
|
|||
|
|||
Problema Con Select Single
Hola Necesito Dejar De Usar El Select Single Por que Solo Me Trae Un Solo Registro Pero He Intentado Pero No He Podido Alguien Me Puede Apoyar Con Un Ejemplo O Algun Comentario Se Lo Agradeceria Mucho.
Select Single Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart From Bkpf Into (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat , T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart) Where Bukrs Eq P_bukrs And Belnr In S_belnr And Gjahr In S_gjahr. Select Single Sgtxt Prctr Into (t_datos-sgtxt , T_datos-prctr) From Bseg Where Bukrs Eq T_datos-bukrs And Belnr Eq T_datos-belnr And Gjahr Eq T_datos-gjahr. Loop At T_datos. Select Single Sgtxt Prctr Into (t_datos-sgtxt , T_datos-prctr) From Bseg Where Bukrs Eq T_datos-bukrs And Belnr Eq T_datos-belnr And Gjahr Eq T_datos-gjahr. Endloop. Append T_datos. Endform.
__________________
tenchy |
#2
|
|||
|
|||
types: begin of ty_bkpf, bukrs type bkpf-bukrs, belnr type bkpf-belnr, gjahr type bkpf-gjahr, bldat type bkpf-bldat, budat type bkpf-budat, xblnr type bkpf-xblnr, bktxt type bkpf-bktxt, blart type bkpf-blart, end of ty_bkpf. types: begin of ty_bseg, bukrs type bseg-bukrs, belnr type bseg-belnr, gjahr type bseg-gjahr, buzei type bseg-buzei, sgtxt type bseg-sgtxt, prctr type bseg-prctr, end of ty_bseg. types: begin of ty_datos, bukrs type bkpf-bukrs, belnr type bkpf-belnr, gjahr type bkpf-gjahr, buzei type bseg-buzei, bldat type bkpf-bldat, budat type bkpf-budat, xblnr type bkpf-xblnr, bktxt type bkpf-bktxt, blart type bkpf-blart, Sgtxt type bseg-sgtxt, Prctr type bseg-prctr, end of ty_datos. data: t_datos type standard table of ty_datos, t_bkpf type standard table of ty_bkpf, t_bseg type standard table of ty_bseg. data: wa_bkpf type ty_bkpf, wa_bseg type ty_bseg, wa_datos type ty_datos. ** También podrías llenar t_datos directamente Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart From Bkpf Into table t_bkpf Where Bukrs Eq P_bukrs And Belnr In S_belnr And Gjahr In S_gjahr. if t_bkpf[] is not initial. Select bukrs belnr gjahr buzei Sgtxt Prctr From Bseg Into table t_bseg for all entries in t_bkpf Where Bukrs Eq T_bkpf-bukrs And Belnr Eq T_bkpf-belnr And Gjahr Eq T_bkpf-gjahr. endif. Loop At T_bkpf into wa_bkpf. ** Movés los campos de wa_bkpf a wa_datos. loop at t_bseg into wa_bseg where bukrs eq wa_bkpf-bukrs and belnr eq wa_bkpf-belnr and gjahr eq wa_bkpf-gjahr. ** Movés los campos de wa_bseg a wa_datos. append wa_datos to t_datos. clear wa_datos. endloop. Endloop. Básicamente sería eso... después hay varias cosas para mejorar si necesitás performance (tablas sorted, loopear la bseg directo y un read a bkpf si cambió el valor, usar índices, etc etc) Saludos! |
#3
|
|||
|
|||
No estaras haciendo un select single de campos no clave no?
|
#4
|
|||
|
|||
Desmoquattro
HOLA PUES AMIGO PARECE QUE SI ES CORRECTO TODO LO UNICO QUE NO ENTIENDO ES QUE AL MOMENTO DE CHECAR NO TRAE NADA .
SUPONGO SEA POR DONDE COLOCASTE EL APPEND DENTRO DEL LOOP. PERO YA LO SAQUE NO ME MANDA NADA AL ALV. CREO QUE TENGO COLOCARE TODO MI CODIGO ESPERO ESTE ENTENDIBLE.
__________________
tenchy Úlima edición por aaron alfonso fecha: 28/05/14 a las 17:48:40. |
#5
|
|||
|
|||
Codigo
REPORT ZCONSULTA_DOCFI. TABLES:BKPF,BSEG. TYPES: BEGIN OF TY_BKPF, BUKRS TYPE BKPF-BUKRS, BELNR TYPE BKPF-BELNR, GJAHR TYPE BKPF-GJAHR, BLDAT TYPE BKPF-BLDAT, BUDAT TYPE BKPF-BUDAT, XBLNR TYPE BKPF-XBLNR, BKTXT TYPE BKPF-BKTXT, BLART TYPE BKPF-BLART, END OF TY_BKPF. TYPES: BEGIN OF TY_BSEG, BUKRS TYPE BSEG-BUKRS, BELNR TYPE BSEG-BELNR, GJAHR TYPE BSEG-GJAHR, SGTXT TYPE BSEG-SGTXT, PRCTR TYPE BSEG-PRCTR, END OF TY_BSEG. TYPES: BEGIN OF TY_DATOS, BUKRS TYPE BKPF-BUKRS, BELNR TYPE BKPF-BELNR, GJAHR TYPE BKPF-GJAHR, BLDAT TYPE BKPF-BLDAT, BUDAT TYPE BKPF-BUDAT, XBLNR TYPE BKPF-BKTXT, BKTXT TYPE BKPF-bktxt, BLART TYPE BKPF-BLART, SGTXT TYPE BSEG-SGTXT, PRCTR TYPE BSEG-PRCTR, END OF TY_DATOS. DATA:e_layout TYPE lvc_s_layo, t_fcat TYPE lvc_t_fcat, fldtext TYPE char50. DATA: T_DATOS TYPE STANDARD TABLE OF TY_DATOS, T_BKPF TYPE STANDARD TABLE OF TY_BKPF, T_BSEG TYPE STANDARD TABLE OF TY_BSEG. DATA: WA_BKPF TYPE TY_BKPF, WA_BSEG TYPE TY_BSEG, WA_DATOS TYPE TY_DATOS. " FILTROS DE BUSQUEDA DE CAMPOS SELECT-OPTIONS: S_BELNR FOR BKPF-BELNR, S_BLDAT FOR BKPF-BLDAT, S_GJAHR FOR BKPF-GJAHR, S_BUDAT FOR BKPF-BUDAT, S_XBLNR FOR BKPF-XBLNR, S_BLART FOR BKPF-BLART. PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY. *&--------------------------------------------------------------------* START-OF-SELECTION."Ejecuta sub-rutinas PERFORM PIDE_DATOS. "Sub-rutina paso 1 PERFORM REPORTE_ALV."Sub-rutina paso 2 *&--------------------------------------------------------------------* FORM PIDE_DATOS. SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART FROM BKPF INTO TABLE T_BKPF WHERE BUKRS EQ P_BUKRS AND BELNR IN S_BELNR AND GJAHR IN S_GJAHR. IF T_BKPF[] IS NOT INITIAL. SELECT BUKRS BELNR GJAHR SGTXT PRCTR FROM BSEG INTO TABLE T_BSEG FOR ALL ENTRIES IN T_BKPF WHERE BUKRS EQ T_BKPF-BUKRS AND BELNR EQ T_BKPF-BELNR AND GJAHR EQ T_BKPF-GJAHR. ENDIF. LOOP AT T_BKPF INTO WA_BKPF. ** Movés los campos de wa_bkpf a wa_datos. LOOP AT T_BSEG INTO WA_BSEG WHERE BUKRS EQ WA_BKPF-BUKRS AND BELNR EQ WA_BKPF-BELNR AND GJAHR EQ WA_BKPF-GJAHR. ** Movés los campos de wa_bseg a wa_datos. ENDLOOP. ENDLOOP. APPEND WA_DATOS TO T_DATOS. CLEAR WA_DATOS. ENDFORM. *&--------------------------------------------------------------------* *REPORTE_ALV.- "SUBRUTINA" (SI AHI DATOS EMPIEZA)SI HAY DATOS,CARGA LOS DATOS Y EL CATALOGO. *SI NO(NO PRESENTA DATOS) *&--------------------------------------------------------------------* FORM REPORTE_ALV. CHECK NOT T_DATOS[] IS INITIAL." REVISA SI REALMENTE AHI DATOS EN (TAB.INT.) T_DATOS PERFORM catalogo_fcat. e_layout-zebra = 'X'. e_layout-sel_mode = 'D'. e_layout-no_rowmove = 'X'. e_layout-col_opt = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "LLAMADO DE FUNCION ALV. EXPORTING i_callback_program = sy-repid i_callback_html_top_of_page = 'MY_HTML_TOP_PAGE' is_layout_lvc = e_layout it_fieldcat_lvc = t_fcat TABLES t_outtab = T_DATOS EXCEPTIONS program_error = 1. IF SY-TCODE ='ZCONSULTA_DOCFI'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* * CATALOGO.- COLOCA LAS CABECERAS DEL ALV *&---------------------------------------------------------------------* FORM catalogo_fcat. PERFORM agrega_campos USING: 'BUKRS' 'BUKRS' 'BKPF' space space, 'BELNR' 'BELNR' 'BKPF' space space, 'GJAHR' 'GJAHR' 'BKPF' space space, 'BLDAT' 'BLDAT' 'BKPF' space space, 'BUDAT' 'BUDAT' 'BKPF' space space, 'XBLNR' 'XBLNR' 'BKPF' space space, 'BKTXT' 'BKTXT' 'BKPF' space space, 'BLART' 'BLART' 'BKPF' space space, 'SGTXT' 'SGTXT' 'BSEG' space space, 'PRCTR' 'PRCTR' 'BSEG' space space. ENDFORM. " CATALOGO_FCAT *&---------------------------------------------------------------------* * AGREGA CAMPOS *&---------------------------------------------------------------------* FORM agrega_campos USING value(p1) value(p2) value(p3) value(p4) value(p5). DATA l_fcat TYPE lvc_s_fcat. l_fcat-fieldname = p1. l_fcat-ref_field = p2. l_fcat-ref_table = p3. l_fcat-coltext = p4. l_fcat-inttype = p5. l_fcat-col_opt = 'X'. IF p5 NE space. l_fcat-intlen = 20. l_fcat-decimals = 2. l_fcat-decimals_o = 2. ENDIF. APPEND l_fcat TO t_fcat. ENDFORM. " finliza agrega_campos *&---------------------------------------------------------------------* *&Form MY_USER_COMMAND *&---------------------------------------------------------------------* FORM my_user_command USING p_ucomm TYPE sy-ucomm p_selfield TYPE slis_selfield. CASE p_ucomm. WHEN 'REGR' OR 'SALI'. p_selfield-exit = abap_true. ENDCASE. ENDFORM. " MY_USER_COMMAND *-----------------------------------------------------------------------*
__________________
tenchy |
#6
|
|||
|
|||
Puedes hacer todo en un solo INNER JOIN:
Por razones de rendimiento, no deberias hacer un SELECT dentro de un LOOP, imaginate que tengas 1000 registros en el LOOP vas a realizar 1000 consultas a la base de datos, cuando puedes hacer una sola consulta que te traiga toda la data. Úlima edición por Ripper87 fecha: 28/05/14 a las 18:24:30. |
#7
|
|||
|
|||
Ripper
me parece buena tu observación ripper pero el problema es la tabla bseg
*Para tablas pool, tablas cluster y vistas de supresión no se permite JOIN:BSEG
__________________
tenchy |
#8
|
|||
|
|||
Tienes razón, se me olvidó...
Entonces hay que hacerlo como te lo colocó el amigo más arriba, solo te faltaría hacer el APPEND a la tabla, y yo agregaría el campo BUZEI a las consultas y condiciones, ya que es un campo clave que identifica la posición del documento, si un documento tiene varias posiciones y no verificas ese campo puedes estar mezclando datos de posiciones diferentes y traerte data erronea. |
#9
|
|||
|
|||
Cuando usas un SELECT SINGLE la consulta solo te regresa un registro, si lo que quieres es obtener mas registros debes quitar la palabra SINGLE y poner que reciba los datos en una tabla de la misma estructura con los datos que estas consultando, usando INTO TABLE. Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart From Bkpf Into TABLE (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat, T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart) Where Bukrs Eq P_bukrs And Belnr In S_belnr And Gjahr In S_gjahr. En la parte del INTO TABLE puedes generar un types y posteriormente una workarea con esa estructura y su tabla interna . TYPES: BEGIN OF ty_wa, Bukrs type bukrs, Belnr type belnr_d, Gjahr type gjahr, Bldat type bldat, Budat type budat, Xblnr type xblnr, Bktxt type bktxt, Blart type blart, END OF ty_wa. data: it_tabla type table of ty_wa, wa_tabla type ty_wa. quedaría la consulta así: Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart From Bkpf Into table it_tabla Where Bukrs Eq P_bukrs And Belnr In S_belnr And Gjahr In S_gjahr. Saludos. |
#10
|
|||
|
|||
problema con las modificaciones propuestas
hola
he estado trando de entender sus opiniones encuanto alo que debo de hacer pero mi programa con alv no funciona no me trae los datos debuggie y no inserta , espero puedan seguirme ayudando para solucionar mi problema. saludos .!le dejo lo que hasta el momento llevo *&---------------------------------------------------------------------* *&Report ZVERCONSULTA *&---------------------------------------------------------------------* *&Analisis de Documentos FI *&---------------------------------------------------------------------* REPORT ZCONSULTA_DOCFI. TABLES:BKPF,BSEG. TYPES: BEGIN OF TY_BKPF, BUKRS TYPE BKPF-BUKRS, BELNR TYPE BKPF-BELNR, GJAHR TYPE BKPF-GJAHR, BLDAT TYPE BKPF-BLDAT, BUDAT TYPE BKPF-BUDAT, XBLNR TYPE BKPF-XBLNR, BKTXT TYPE BKPF-BKTXT, BLART TYPE BKPF-BLART, END OF TY_BKPF. TYPES: BEGIN OF TY_BSEG, BUKRS TYPE BSEG-BUKRS, BELNR TYPE BSEG-BELNR, GJAHR TYPE BSEG-GJAHR, SGTXT TYPE BSEG-SGTXT, PRCTR TYPE BSEG-PRCTR, END OF TY_BSEG. TYPES: BEGIN OF TY_DATOS, BUKRS TYPE BKPF-BUKRS, BELNR TYPE BKPF-BELNR, GJAHR TYPE BKPF-GJAHR, BLDAT TYPE BKPF-BLDAT, BUDAT TYPE BKPF-BUDAT, XBLNR TYPE BKPF-XBLNR, BKTXT TYPE BKPF-BKTXT, BLART TYPE BKPF-BLART, SGTXT TYPE BSEG-SGTXT, PRCTR TYPE BSEG-PRCTR, END OF TY_DATOS. DATA:e_layout TYPE lvc_s_layo, t_fcat TYPE lvc_t_fcat, fldtext TYPE char50. DATA: T_DATOS TYPE STANDARD TABLE OF TY_DATOS, T_BKPF TYPE STANDARD TABLE OF TY_BKPF, T_BSEG TYPE STANDARD TABLE OF TY_BSEG. DATA: WA_BKPF TYPE TY_BKPF, WA_BSEG TYPE TY_BSEG, WA_DATOS TYPE TY_DATOS. " FILTROS DE BUSQUEDA DE CAMPOS SELECT-OPTIONS: S_BELNR FOR BKPF-BELNR, S_BLDAT FOR BKPF-BLDAT, S_GJAHR FOR BKPF-GJAHR, S_BUDAT FOR BKPF-BUDAT, S_XBLNR FOR BKPF-XBLNR, S_BLART FOR BKPF-BLART. PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY. *&--------------------------------------------------------------------* START-OF-SELECTION."Ejecuta sub-rutinas PERFORM PIDE_DATOS. "Sub-rutina paso 1 PERFORM REPORTE_ALV."Sub-rutina paso 2 *&--------------------------------------------------------------------* FORM PIDE_DATOS. SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART FROM BKPF INTO TABLE T_BKPF WHERE BUKRS EQ P_BUKRS AND BELNR IN S_BELNR AND GJAHR IN S_GJAHR. IF T_BKPF[] IS NOT INITIAL. SELECT BUKRS BELNR GJAHR SGTXT PRCTR FROM BSEG INTO TABLE T_BSEG FOR ALL ENTRIES IN T_BKPF WHERE BUKRS EQ T_BKPF-BUKRS AND BELNR EQ T_BKPF-BELNR AND GJAHR EQ T_BKPF-GJAHR. ENDIF. LOOP AT T_BKPF INTO WA_BKPF. WA_DATOS-BUKRS = WA_BKPF-BUKRS. WA_DATOS-BELNR = WA_BKPF-BELNR. WA_DATOS-GJAHR = WA_BKPF-GJAHR. WA_DATOS-XBLNR = WA_BKPF-XBLNR. WA_DATOS-BKTXT = WA_BKPF-BKTXT. WA_DATOS-BLART = WA_BKPF-BLART. WA_DATOS-BUDAT = WA_BKPF-BUDAT. WA_DATOS-BLDAT = WA_BKPF-BLDAT. READ TABLE T_BKPF INTO WA_BKPF WITH KEY BUKRS = WA_BKPF-BUKRS BELNR = WA_BKPF-BELNR GJAHR = WA_BKPF-GJAHR. IF SY-SUBRC EQ 0. WA_DATOS-SGTXT = WA_BSEG-SGTXT. WA_DATOS-PRCTR = WA_BSEG-PRCTR. ENDIF. APPEND WA_DATOS TO T_DATOS. CLEAR WA_DATOS. ENDLOOP. ENDFORM. *&--------------------------------------------------------------------* *REPORTE_ALV.- "SUBRUTINA" (SI AHI DATOS EMPIEZA)SI HAY DATOS,CARGA LOS DATOS Y EL CATALOGO. *SI NO(NO PRESENTA DATOS) *&--------------------------------------------------------------------* FORM REPORTE_ALV. CHECK NOT T_DATOS[] IS INITIAL." REVISA SI REALMENTE AHI DATOS EN (TAB.INT.) T_DATOS PERFORM catalogo_fcat. e_layout-zebra = 'X'. e_layout-sel_mode = 'D'. e_layout-no_rowmove = 'X'. e_layout-col_opt = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "LLAMADO DE FUNCION ALV. EXPORTING i_callback_program = sy-repid i_callback_html_top_of_page = 'MY_HTML_TOP_PAGE' is_layout_lvc = e_layout it_fieldcat_lvc = t_fcat TABLES t_outtab = T_DATOS EXCEPTIONS program_error = 1. IF SY-TCODE ='ZCONSULTA_DOCFI'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* * CATALOGO.- COLOCA LAS CABECERAS DEL ALV *&---------------------------------------------------------------------* FORM catalogo_fcat. PERFORM agrega_campos USING: 'BUKRS' 'BUKRS' 'BKPF' space space, 'BELNR' 'BELNR' 'BKPF' space space, 'GJAHR' 'GJAHR' 'BKPF' space space, 'BLDAT' 'BLDAT' 'BKPF' space space, 'BUDAT' 'BUDAT' 'BKPF' space space, 'XBLNR' 'XBLNR' 'BKPF' space space, 'BKTXT' 'BKTXT' 'BKPF' space space, 'BLART' 'BLART' 'BKPF' space space, 'SGTXT' 'SGTXT' 'BSEG' space space, 'PRCTR' 'PRCTR' 'BSEG' space space. ENDFORM. " CATALOGO_FCAT *&---------------------------------------------------------------------* * AGREGA CAMPOS *&---------------------------------------------------------------------* FORM agrega_campos USING value(p1) value(p2) value(p3) value(p4) value(p5). DATA l_fcat TYPE lvc_s_fcat. l_fcat-fieldname = p1. l_fcat-ref_field = p2. l_fcat-ref_table = p3. l_fcat-coltext = p4. l_fcat-inttype = p5. l_fcat-col_opt = 'X'. IF p5 NE space. l_fcat-intlen = 20. l_fcat-decimals = 2. l_fcat-decimals_o = 2. ENDIF. APPEND l_fcat TO t_fcat. ENDFORM. " finliza agrega_campos *&---------------------------------------------------------------------* *&Form MY_USER_COMMAND *&---------------------------------------------------------------------* FORM my_user_command USING p_ucomm TYPE sy-ucomm p_selfield TYPE slis_selfield. CASE p_ucomm. WHEN 'REGR' OR 'SALI'. p_selfield-exit = abap_true. ENDCASE. ENDFORM. " MY_USER_COMMAND *-----------------------------------------------------------------------*
__________________
tenchy |
Herramientas | Buscar en Tema |
Desplegado | |
|
|