Ayuda SAP

Creación de un listado de clientes

Se solicita la creación de un listado de clientes con la selección de oficina de ventas y grupo de vendedor. Debe contener la información del interlocutor vendedor. código de cliente. nit. ciudad. nombre del cliente. oficina de ventas. grupo de vendedor. lista de precios asignada.

:exclamation: @luisa_aldana2, no veo tu tema de presentación en el foro y lo requerimos en las normas de convivencia del foro de Ayuda SAP que por favor te pido les des una mirada.

Por lo tanto no sé si eres un consultor o usuario final o usuario clave, o un estudiante o interesado en SAP en general … Por favor abre un nuevo tema en #presentaciones, y brinda más detalles sobre tu perfil, tareas, etc.

-Muchas gracias

Hola,

Aparte de la presentación, no entiendo mucho tu duda.

Pareciera que hiciste un copy-paste de lo que te solicitaron hacer.

Por lo visto debes crear un reporte para mostrar ese listado, en todo caso deberías comenzar y mientras te vaya saliendo alguna duda puntual, nos vas diciendo, ¿o necesitas algún tipo de ejemplo de como hacerlo?
¿quizás algún ejemplo de creación de ALV?

Saludos,
Sebastián

si Sebastián esto es algo que me solicitaron hacer, pero se me complican mucho los select todavía no entiendo la estructura con esos nombres extraños gracias o si alguien puede explicarme como empezar a hacerlos se lo agradecería.

Bueno, en principio hay que identificar las tablas a las cuales debemos acceder.

Por lo poco que entiendo de lo que te pasaron, deberiamos acceder a las tablas KNA1 (Maestro de clientes (parte general)) y KNVV (Datos comerciales).

¿Son esas las tablas a las cuales estás haciendo los selects? si es asi, nos pegarías el código que hiciste para revisarlo y ver cómo avanzar?

Saludos,
Sebastián

*&---------------------------------------------------------------------*
*& 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,
  ORTO1 TYPE KNA1-ORT01,
  NAME1 TYPE KNA1-NAME1,
  VKBUR TYPE KNVV-VKBUR,
  VKGRP TYPE KNVV-VKGRP,
  PLTYP TYPE KNVV-PLTYP,
  KUNNR TYPE KNVP-KUNNR,
  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 NAME1 ORT01 STCD1
           INTO (KNA1-NAME1, KNA1-ORT01, KNA1-STCD1)
           FROM KNA1
           WHERE KUNNR = KNVP-KUNNR.

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


    IF SY-SUBRC NE 0.
      CLEAR KNVP-PERNR.
    ENDIF.
    VKGRP = KNVP-PERNR.
    SELECT SINGLE PERNR
            INTO PA0001-PERNR
            FROM PA0001
            WHERE PERNR = KNVP-PERNR.

    SELECT VKBUR VKGRP PLTYP
           INTO (KNVV-VKBUR, KNVV-VKGRP, KNVV-PLTYP)
           FROM KNVV
           WHERE VKBUR EQ VBAK-VKBUR
            AND VKGRP EQ VBAK-VKGRP.
    ENDSELECT.
  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

Esto es lo que eh echo pero no sirven mis consultas 

Buenas,

Habria que debuguearlo un poco, pero lo que mas me llama la atencion es que no veo que estés agregando los registros a la tabla LISTADO.

Si esta tabla no tiene registros el ALV no tiene nada para mostrar. O sea, ir pasando los campos que vas obteniendo a LISTADO-STCD1, LISTADO-ORTO1, y APPEND LISTADO por cada vuelta del select.

Eso como para empezar, luego intentaria reemplazar la parte de select -end select for hacer selects INTO TABLE (guardar los datos en tablas internas) y luego hacer FOR ALL ENTRIES, pero esto ya no es obligatorio. Empezaria por lo que te dije arriba, ir debugueando y solucionando a prueba y error.

Saludos,
Sebastián

tu de pronto no sabes como hacer la consulta para que me muestre interlocutor vendedor

Si, estoy intentando orientarte para que lo puedas hacer.

Por otro lado tampoco estás completando los datos VBAK-VKBUR y VBAK-VKGRP, por eso ese select no te trae datos.

Por favor intenta modificar esas dos cosas que te comenté asi vemos si te trae datos ahora.

Gracias.

form datos.

  select name1 ort01 stcd1
           into (kna1-name1, kna1-ort01, kna1-stcd1)
           from kna1
           where kunnr = knvp-kunnr.

    select single pernr
             into knvp-pernr
             from knvp
            where kunnr = knvp-kunnr
             and parvw = 've'.


    if sy-subrc ne 0.
      clear knvp-pernr.
    endif.
    vkgrp = knvp-pernr.
    select single pernr
            into pa0001-pernr
            from pa0001
            where pernr = knvp-pernr.

    select vkbur vkgrp pltyp
           into (knvv-vkbur, knvv-vkgrp, knvv-pltyp)
           from knvv
           where vkbur eq knvv-vkbur
            and vkgrp eq knvv-vkgrp.
            listado-name1 = kna1-name1.
            listado-ort01 = kna1-ort01.
            listado-stcd1 = kna1-stcd1.
            listado-pernr = knvp-pernr.
            listado-parvw = 've'.
            listado-kunnr = knvp-kunnr.
            listado-vkbur = knvv-vkbur.
            listado-vkgrp = knvv-vkgrp.
            listado-pltyp = knvv-pltyp.
            append listado.
            clear listado.
         endselect.
        endselect.
  perform campos_alv.
  perform ordenar_alv.
  perform layout.
  perform alv_report.
endform.

Mira @sconoredhot intente arreglar y hacer el debugging y aun nada me trae datos

@luisa_aldana2, por favor lee cómo pegar códigos correctamente.

@SidV A disculpa ya lo leí y aprendí como hacerlo la próxima vez
gracias

El problema general de tu código, es que haces selects, con un filtro vacío.

Por ejemplo, en estos dos primeros selects, nunca estás llenando previamente el valor ‘knvp-kunnr’.

Cuando se hace un programa, generalmente el primer select que haces filtras por el valor que viene en la pantalla de seleccion, por lo que vi, creaste dos parametros.

PARAMETERS: VKBUR TYPE KNVV-VKBUR DEFAULT ‘008’ OBLIGATORY,
VKGRP TYPE KNVV-VKGRP DEFAULT ‘004’ OBLIGATORY.

El primer select deberia ser usando esos dos valores, quizas primero hacer el select a la KNVV, de ahi me traigo los KUNNR, y ya teniendo el valor de KUNNR puedes hacer el select a la KNA1.

Espero que te sirva!
Saludos.

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

esto fueron las dos maneras cual de las dos maneras es mas adecuado gracias por la ayuda       

Hola,

Entiendo que la segunda es mejor porque contiene los dos parámetros que creaste.

De todas maneras, te falta un tercer parámetro, el KUNNR.

Consulta aparte, no te comentaron de la nomenclatura?

Generalmente un parámetro comienza con P_*. Claro que no es obligatorio.

Entonces, quedaría algo así_

PARAMETERS: P_VKBUR TYPE KNVV-VKBUR DEFAULT '008' OBLIGATORY,
                        P_KUNNR TYPE KNVV-KUNNR,
                        P_VKGRP TYPE KNVV-VKGRP DEFAULT '004' OBLIGATORY.

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

Espero que te sirva!
Saludos.

1 me gusta

ten en cuenta que haces el select a 3 campos y en into solo 2, supongo que es cosa del copy&paste

Si, yo copié el select de ella, y no me di cuenta de eso, es cierto, también hace falta el into para la tercer variable. Gracias :smiley:

VKBUR PLTYP VKGRP

Pero no necesito seleccionar por número de deudor(kunnr) solo por oficina de ventas y grupo de vendedor. por eso en los parámetros le puse solo esos dos datos.
O debo ponerlo obligatoriamente para llamarlo en el select