Ayuda SAP

Creación de un listado de clientes

No, te lo puse porque vi que filtrabas por KUNNR en el select.

Entonces seria asi:

   SELECT VKBUR PLTYP VKGRP
       INTO (KNVV-VKBUR KNVV-PLTYP, KNVV-VKGRP)
       FROM KNVV
        WHERE VKBUR EQ VKGRP
         AND  VKGRP EQ VKGRP.

Saludos.

@sconoredhot ahí ya sigo con el select para que me traiga el kunnr o el siguiente select es para la tabla knvp

y, ya te convendria tener el KUNNR para poder hacer los selects a la KNA1 con el cliente.

De hecho, te lo puedes traer en el select que acabamos de hacer:

SELECT KUNNR VKBUR PLTYP VKGRP
INTO (KNVV-KUNNR, KNVV-VKBUR, KNVV-PLTYP, KNVV-VKGRP)
FROM KNVV
WHERE VKBUR EQ VKGRP
AND VKGRP EQ VKGRP.

Y luego con el KNVV-KUNNR puedes hacer el resto de los selects que necesites.

ME DICEN QUE PARA TRAER EL INTERLOCUTOR VENDEDOR debo ingresar primero a la tabla knvp de ahí traer el campo parvw (funcion interlocutor) de ahí hacer creo otro select con tabla pa0001(registro maestro personal)y de esa manera me trae el interlocutor vendedor pero no lo entiendo porfa necesito ayuda para realizar este proceso gracias

Hola,

No me cierra lo que comentas, y te muestro el motivo:

Si es así como dices, puedes hacer el select a la KNVP pero en lugar de traerte el campo PARVW, deberias traerte el campo PERNR. Por otro lado, la tabla KNVP no tiene los campos VKGRP y VKBUR, entonces vas a tener que ver con que campos filtrar (posiblemente VKORG y VTWEG).

Luego, con ese campo PERNR, si puedes hacer el select a la PA001, pero esta tabla, no veo que tenga un campo que diga interlocutor / Vendedor / etc. No se si despues de esta se debe acceder a otra tabla de HR.

Quizas deberias pedir que te den mas detalle de lo que necesitan.

Saludos,
Sebastián

2 Me gusta

Hola a todos amigos, luisa_aldana2 has intentado usar la SQVI, hace mucho tiempo deje de hacer reportes desde 0, ya todos los inicio desde allí, claro, luego edito el o los select.

@Dlanor20777 no he intentado al igual soy nueva en abap que no he tenido la oportunidad de usarlo pero si es una manera practica de desarrollar un reporte me encantaría aprender.
Gracias

Es que del campo PARVW necesito el valor (ve) y del campo PERNR necesito este (607) y me dicen que con estos dos ya puedo hacer el select con la tabla PA0001

SELECT PERNR PARVW
       INTO (KNVP-PERNR, KNVP-PARVW)
      FROM KNVP
     WHERE KUNNR EQ KNVV-KUNNR
      AND PERNR EQ 'V'
      AND PARVW EQ '607'.

Bueno, te cuidado que los filtros los tienes invertidos

  AND PERNR EQ 'V'
  AND PARVW EQ '607'.

Creo que deberia ser, si hay datos de lo que dices:

  AND PERNR EQ '607'
  AND PARVW EQ 'VE'.

Entonces, si, con el PERNR ya puedes acceder a la tabla PA001, pero no sé que campos tienes que traer de ahi, eso ya te lo dejo para que revises :smiley:

Saludos.

1 me gusta

@sconoredhot Disculpa el campo que utilice WHERE KUNNR EQ KNVV-KUNNR si puede ir ahí ya que lo amarra con el select anterior o me equivoco

SELECT KUNNR VKBUR PLTYP VKGRP
   INTO (KNVV-KUNNR, KNVV-VKBUR, KNVV-PLTYP, KNVV-VKGRP)
    FROM KNVV
    WHERE VKBUR EQ VKBUR
      AND VKGRP EQ VKGRP.

    SELECT PERNR PARVW
     INTO (KNVP-PERNR, KNVP-PARVW)
      FROM KNVP
       WHERE KUNNR EQ KNVV-KUNNR
        AND PERNR EQ '607'
        AND PARVW EQ 'VE'.
    ENDSELECT.
  ENDSELECT.

Si, a simple vista esos dos selects se ven bien.

Solo a modo de comentario, fijate que estas tomando de la tabla KNVP, los valores PERNR y PARVW, que son los mismos con los cuales filtras… o sea, hacer ese select, es lo mismo que hacer:

KNVP-PERNR = ‘607’.
KNVP-PARVW = ‘VE’.

Pero entiendo que se puede hacer para comprobar la existencia del registro.

Sigue con el requerimiento y nos cuentas como te fue.

Saludos.

1 me gusta

ahí ya están todas las tablas que me pidieron en el reporte si algo está mal porfa háganmelo saber

 SELECT KUNNR VKBUR PLTYP VKGRP
   INTO (KNVV-KUNNR, KNVV-VKBUR, KNVV-PLTYP, KNVV-VKGRP)
    FROM KNVV
    WHERE VKBUR EQ VKBUR
      AND VKGRP EQ VKGRP.

    SELECT SINGLE PERNR
     INTO KNVP-PERNR
      FROM KNVP
       WHERE KUNNR EQ KNVV-KUNNR
        AND PARVW EQ 'VE'.

    IF SY-SUBRC NE 0.
      CLEAR KNVP-PERNR.
    ENDIF.

    SELECT SINGLE SNAME
      INTO PA0001-SNAME
      FROM PA0001
      WHERE PERNR EQ KNVP-PERNR.

    SELECT SINGLE NAME1 ORT01 STCD1
        INTO (KNA1-NAME1, KNA1-ORT01, KNA1-STCD1)
        FROM KNA1
        WHERE KUNNR EQ KNVV-KUNNR.
    ENDSELECT.
1 me gusta

Va tomando forma!

Parece todo OK, recuerda appendear los resultados a LISTADO antes del ENDSELECT para que te los tome el ALV.

Saludos,

1 me gusta

@sconoredhot No se en que estoy fallando no me salen datos de nada
ayuda plis

SELECT KUNNR VKBUR PLTYP VKGRP
   INTO (KNVV-KUNNR, KNVV-VKBUR, KNVV-PLTYP, KNVV-VKGRP)
    FROM KNVV
    WHERE VKBUR EQ VKBUR
      AND VKGRP EQ VKGRP.

    SELECT SINGLE PERNR
     INTO KNVP-PERNR
      FROM KNVP
       WHERE KUNNR EQ KNVV-KUNNR
        AND PARVW EQ 'VE'.

    IF SY-SUBRC NE 0.
      CLEAR KNVP-PERNR.

      SELECT SINGLE SNAME
        INTO PA0001-SNAME
         FROM PA0001
          WHERE PERNR EQ KNVP-PERNR.

      SELECT SINGLE NAME1 ORT01 STCD1
        INTO (KNA1-NAME1, KNA1-ORT01, KNA1-STCD1)
         FROM KNA1
          WHERE KUNNR EQ KNVV-KUNNR.
      LISTADO-VKBUR = KNVV-VKBUR.
      LISTADO-VKGRP = KNVV-VKGRP.
      LISTADO-PLTYP = KNVV-PLTYP.
      LISTADO-KUNNR = KNVV-KUNNR.
      LISTADO-PERNR = KNVP-PERNR.
      LISTADO-PARVW = 'VE'.
      LISTADO-SNAME = PA0001-SNAME.
      LISTADO-NAME1 = KNA1-NAME1.
      LISTADO-ORT01 = KNA1-ORT01.
      LISTADO-STCD1 = KNA1-STCD1.
      APPEND LISTADO.
      CLEAR LISTADO.
    ENDIF.
  ENDSELECT.
  PERFORM CAMPOS_ALV.
  PERFORM ORDENAR_ALV.
  PERFORM LAYOUT.
  PERFORM ALV_REPORT.
ENDFORM.

deberías debuguear para ver en que punto falla pero veo varias cosillas :

Nunca uso select - enselect compromete el rendimiento pero creo que con esa sentencia hace falta un append para que se guarden los datos

no tiene sentido si no encuentras el pernr en la knvp lo borras y lo pones como condición para un select? supongo que lo que quieres hacer es justo lo contrario

F SY-SUBRC eq 0.

SELECT SINGLE SNAME
INTO PA0001-SNAME
FROM PA0001
WHERE PERNR EQ KNVP-PERNR.

intenta poner todos los campos clave que puedas en los where para mejorar la búsqueda.

3 Me gusta

Si, eso se lo comenté en un punto más arriba pero como está aprendiendo quizás no esté mal que primero aprenda el select - end select y luego otros métodos.

Coincido con todo lo que dice @adalove, intenta hacer esas cosas y debuguearlo, a ver en que punto exacto no te está trayendo datos, o si solo faltaba el append.

Saludos.

@sconoredhot @adalove he estado realizando el debugging y me salta hasta el final no esta pasando por ningún select
:frowning:

has comprobado que la tabla tenga datos para el primer select?[quote=“luisa_aldana2, post:35, topic:13891”]
FROM KNVV
WHERE VKBUR EQ VKBUR
AND VKGRP EQ VKGRP.
[/quote]

Si no está pasando por NINGÚN select, debe haber alguna sentencia previa que esté impidiendo llegar.

Cualquier cosa pásanos el código completo.

1 me gusta
*&---------------------------------------------------------------------*
*& Report  ZSD_LISTADO_DE_CLIENTES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSD_LISTADO_DE_CLIENTES.

TABLES: KNA1, KNVV, KNVP, VBAK, VBAP,PA0001.


DATA: IT_FIELDCAT                 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      WA_FIELDCAT                 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP                TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT                   TYPE SLIS_LAYOUT_ALV,
      GD_REPID                    LIKE SY-REPID,
      GT_EVENTS                   TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS               TYPE SLIS_PRINT_ALV,
      IT_SORTCAT                  TYPE SLIS_T_SORTINFO_ALV,
      TEXTO(120).

DATA: BEGIN OF LISTADO OCCURS 0,
  STCD1 TYPE KNA1-STCD1,
  ORT01 TYPE KNA1-ORT01,
  NAME1 TYPE KNA1-NAME1,
  VKBUR TYPE KNVV-VKBUR,
  VKGRP TYPE KNVV-VKGRP,
  PLTYP TYPE KNVV-PLTYP,
  KUNNR TYPE KNVP-KUNNR,
  PERNR TYPE KNVP-PERNR,
  PARVW TYPE KNVP-PARVW,
  SNAME TYPE PA0001-SNAME,

END OF LISTADO.

SELECTION-SCREEN BEGIN OF BLOCK TEXT-001 WITH FRAME TITLE TEXT-004.
PARAMETERS: VKBUR TYPE KNVV-VKBUR DEFAULT '008' OBLIGATORY,
            VKGRP TYPE KNVV-VKGRP DEFAULT '004' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK TEXT-001.


START-OF-SELECTION.
  PERFORM DATOS.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  DATOS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM DATOS.

  SELECT KUNNR VKBUR PLTYP VKGRP
   INTO (KNVV-KUNNR, KNVV-VKBUR, KNVV-PLTYP, KNVV-VKGRP)
    FROM KNVV
    WHERE VKBUR EQ VKBUR
      AND VKGRP EQ VKGRP.

    SELECT SINGLE PERNR
     INTO KNVP-PERNR
      FROM KNVP
       WHERE KUNNR EQ KNVV-KUNNR
        AND PARVW EQ 'VE'.

    IF SY-SUBRC NE 0.

      SELECT SINGLE SNAME
        INTO PA0001-SNAME
         FROM PA0001
          WHERE PERNR EQ KNVP-PERNR.

      SELECT SINGLE NAME1 ORT01 STCD1
        INTO (KNA1-NAME1, KNA1-ORT01, KNA1-STCD1)
         FROM KNA1
          WHERE KUNNR EQ KNVV-KUNNR.
      LISTADO-VKBUR = KNVV-VKBUR.
      LISTADO-VKGRP = KNVV-VKGRP.
      LISTADO-PLTYP = KNVV-PLTYP.
      LISTADO-KUNNR = KNVV-KUNNR.
      LISTADO-PERNR = KNVP-PERNR.
      LISTADO-PARVW = 'VE'.
      LISTADO-SNAME = PA0001-SNAME.
      LISTADO-NAME1 = KNA1-NAME1.
      LISTADO-ORT01 = KNA1-ORT01.
      LISTADO-STCD1 = KNA1-STCD1.
      APPEND LISTADO.
      CLEAR LISTADO.
    ENDIF.
  ENDSELECT.
  PERFORM CAMPOS_ALV.
  PERFORM ORDENAR_ALV.
  PERFORM LAYOUT.
  PERFORM ALV_REPORT.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  CAMPOS_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM CAMPOS_ALV .

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'NAME1' .
  it_fieldcat-tabname   = 'LISTADO'.
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'NOM. CLIENTE'.
  IT_FIELDCAT-OUTPUTLEN = '16'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'KUNNR' .
  it_fieldcat-tabname   = 'LISTADO'.
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'COD. CLIENTE'.
  IT_FIELDCAT-OUTPUTLEN = '16'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'STCD1' .
  it_fieldcat-tabname   = 'LISTADO' .
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'NIT'.
  IT_FIELDCAT-OUTPUTLEN = '16'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'ORT01' .
  it_fieldcat-tabname   = 'LISTADO' .
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'CIUDAD'.
  IT_FIELDCAT-OUTPUTLEN = '16'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'VKBUR' .
  it_fieldcat-tabname   = 'LISTADO' .
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'OFI. VENTA'.
  IT_FIELDCAT-OUTPUTLEN = '10'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'VKGRP' .
  it_fieldcat-tabname   = 'LISTADO'.
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'GRUP. VENDEDOR'.
  IT_FIELDCAT-OUTPUTLEN = '10'.
  APPEND it_fieldcat to wa_fieldcat.


  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'PARVW' .
  it_fieldcat-tabname   = 'LISTADO'.
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'INTERL. VENDEDOR'.
  IT_FIELDCAT-OUTPUTLEN = '10'.
  APPEND it_fieldcat to wa_fieldcat.

  CLEAR it_fieldcat.
  it_fieldcat-fieldname = 'PLTYP' .
  it_fieldcat-tabname   = 'LISTADO'.
  it_fieldcat-key       = 'X'.
  IT_FIELDCAT-SELTEXT_M   = 'LIST. PRECIOS'.
  IT_FIELDCAT-OUTPUTLEN = '10'.
  APPEND it_fieldcat to wa_fieldcat.

ENDFORM.      " CAMPOS_ALV
*&---------------------------------------------------------------------*
*&      Form  ORDENAR_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ORDENAR_ALV .
  SORT LISTADO BY NAME1.

  DATA: IT_sort TYPE slis_sortinfo_alv.

*  CLEAR IT_SORT.
*  IT_sort-spos = 1.
*  IT_sort-fieldname = 'CHECK'.
*  IT_sort-up = 'X'.
*  IT_sort-subtot = 'X'.
*  IT_SORT-EXPA = 'X'. " Sirve para que salgan los subtotales
*  APPEND IT_sort TO IT_SORTCAT.

  CLEAR IT_SORT.
  IT_sort-spos = 1.
  IT_sort-fieldname = 'NAME1'.
  IT_sort-up = 'X'.
  IT_sort-subtot = 'X'.
*  IT_SORT-EXPA = 'X'. " Sirve para que salgan los subtotales
  APPEND IT_sort TO IT_SORTCAT.
ENDFORM.                           " ORDENAR_ALV
*&---------------------------------------------------------------------*
*&      Form  LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LAYOUT .
  GD_LAYOUT-NO_INPUT           = 'X'.
  GD_LAYOUT-COLWIDTH_OPTIMIZE  = 'X'.
  GD_LAYOUT-TOTALS_TEXT        = 'TOTALS'(201).
  GD_LAYOUT-ZEBRA              = 'X'.
ENDFORM.                    " LAYOUT
*------------------------------------------------------------------*
*       FORM USER_COMMAND                                          *
*------------------------------------------------------------------*
*       --> R_UCOMM                                                *
*       --> RS_SELFIELD                                            *
*------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.
  RS_SELFIELD-REFRESH = 'X'.

* Check function code
  CASE R_UCOMM.
    WHEN '&IC1' OR 'PICK' .
      RS_SELFIELD-REFRESH = 'X'. "REFRESCAR PANTALLA
  ENDCASE.
  CLEAR R_UCOMM.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  ALV_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_REPORT .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
      I_GRID_TITLE            = 'BUSCAR LISTADO'
      IT_SORT                 = IT_SORTCAT[]
      IS_LAYOUT               = GD_LAYOUT
      IT_FIELDCAT             = WA_FIELDCAT[]
      I_SAVE                  = 'X'
    TABLES
      T_OUTTAB                = LISTADO
    EXCEPTIONS
      PROGRAM_ERROR           = 1
      OTHERS                  = 2.
  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.                    " ALV_REPORT

eso es todo lo que estoy haciendo y no pasa nada y @adalove LAS TABLAS SI TIENE DATOS