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.
@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.
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.
Esto fueron las dos maneras cual de las dos maneras es mas adecuado gracias por la ayuda
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.
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.
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
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