|
#1
|
|||
|
|||
No estaras haciendo un select single de campos no clave no?
|
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
Modificando Aun
EL UNICO DETALLE QUE ASI COMO LO TIENES NO TRAE NADA PERO SI LO MODIFICO SOLO UN POCO ME TRAE SOLO 1 REGISTRO SE SUPONE QUE TRAIGA MUCHOS REGISTROS. TODOS LOS QUE EXISTA EN UN AÑO, O DEL TIPO ZC O DE CIERTO CENTRO : 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 AND BLART IN S_BLART. 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. WA_DATOS-SGTXT = WA_BSEG-SGTXT. WA_DATOS-PRCTR = WA_BSEG-PRCTR. ENDLOOP. IF SY-SUBRC EQ 0. WA_DATOS-SGTXT = WA_BSEG-SGTXT. WA_DATOS-PRCTR = WA_BSEG-PRCTR. ENDIF. READ TABLE T_BKPF INTO WA_BKPF WITH KEY BUKRS = WA_BKPF-BUKRS BELNR = WA_BKPF-BELNR GJAHR = WA_BKPF-GJAHR. APPEND WA_DATOS TO T_DATOS. CLEAR WA_DATOS.
__________________
tenchy |
Herramientas | Buscar en Tema |
Desplegado | |
|
|