viernes, 24 de marzo de 2017

RECOMENDACIONES N°2... Z-VK13 / 24.03.2017

Debes leer bien los tips anteriores... están en una publicación más abajo, más temprano... tiene el mismo nombre pero sin el N°2

- Crea una estructura por cada tabla estándar A790, A601 que vayas a usar
así como una tabla donde guardaras todo y su respectivo work área. Por ejemplo...

TYPES: BEGIN OF TY_A970
VKORG TYPE A970-VKORG,
AUART_SD TYPE A970-AUART_SD,
..
..
..
END OF TY_A970...

DATA GT_A970 TYPE STANDAR TABLE OF TY_A970,
         GS_A970 TYPE TY_A970.

(este es solo un modelo, tu crea tus tablas como ya lo has venido haciendo y mejor te parezca)

- Si te das cuenta estas tablas tienen campos en común por tanto crearás un solo GT_REPORTE
que se alimentará de la o las tablas que escogas o dependiendo del radiobutton.

OJO: Cuando digo que el GT_REPORTE tendrá campos combinados por tablas quiere decir esto,
en la A901 y A601 se repiten en campo MATNR por tanto es un campo genérico entre tablas así que tu GT_REPORTE tendrá
un campo MATNR, pero el campo AUART_SD solo lo encuentras en la A601 y en la A901 no. Bueno igual lo agregas en tu GT_REPORTE
pero este solo se llenará cuando tu radiobutton haga referencia a la A901 ya luego en el fieldcat tu escoges que columnas mostrar 
dependiendo del radiobutton escogido

- Para el momento de hacer las consultas puede que te pongas a pensar sobre el campo inicio - fin de validez y es por eso
que te mencioné en los tips anterior el ponerlo como parametro independiente ya que luego en tus consultas lo usarás...
Por ejemplo...

En tu pantalla tendrás P_VALIDEZ, recuerda que tiene un valor P_VALIDEZ-LOW y P_VALIDEZ-HIGH ya que es un SELECT-OPTION
y se comporta como un rango por tanto esos campos deberás separarlos en variables independientes y en tus consultas usar estas
variables independientes...

LV_DATAB = P_VALIDEZ-LOW "INICIO VALIDEZ
LV_DATBI = P_VALIDEZ-HIGH "FIN VALIDEZ

y en tu select

SELECT...
INTO TABLE...
FROM A601
WHERE DATBI LE LV_DATBI "MENOR IGUAL AL FIN DE VALIDEZ
AND DATAB GE LV_DATAB "MAYOR IGUAL AL INICIO DE VALIDEZ

(de esta manera contemplaría bien la consulta)

- En caso sea una sola tabla a usar harás un solo LOOP a dicha tabla en caso sea más de una, harás un LOOP
a cada una que vayas a usar, trata de condicionar esto / amarrarlo con el radiobutton todo en orden.
Por ejemplo...

DATA: GT_REPORTE TYPE STANDAR TABLE OF TY_REPORTE,
           GS_REPORTE TYPE TY_REPORTE.

FORM ARMAR_REPORTE
----------------------------------------------


IF radioubtton_1 EQ 'X'.

LOOP AT lt_A970 INTO ls_A970.
CLEAR GS_REPORTE. "LIMPIAR LA ESTRUCTURA CON CADA LEÍDA PARA EVITAR DATOS PEGADOS
GS_REPORTE-MATNR = LS_A970-MATNR.
GS_REPORTE-VKORG = LS_A970-VKORG.
...

APPEND GS_REPORTE TO GT_REPORTE.
ENDLOOP.

ENDIF.

IF radiobutton_2 EQ 'X'.
"este es en caso debas llenar datos de dos tablas pero no creo ya que como me indicaste el radiobutton indicará que tabla consultar y con 
"la cuál llenarás tu reporte

LOOP AT lt_A601 INTO ls_A601.
CLEAR GS_REPORTE. "LIMPIAR LA ESTRUCTURA CON CADA LEÍDA PARA EVITAR DATOS PEGADOS
GS_REPORTE-MATNR = LS_A601-MATNR.
GS_REPORTE-VKORG = LS_A601-VKORG.
...

APPEND GS_REPORTE TO GT_REPORTE.
ENDLOOP.

LOOP AT lt_A970 INTO ls_A970.
CLEAR GS_REPORTE. "LIMPIAR LA ESTRUCTURA CON CADA LEÍDA PARA EVITAR DATOS PEGADOS
GS_REPORTE-MATNR = LS_A970-MATNR.
GS_REPORTE-VKORG = LS_A970-VKORG.
...
APPEND GS_REPORTE TO GT_REPORTE.
ENDLOOP.

ENDIF.
---------------------------------------------
ENDFORM.

(ten bastante en cuenta validar que cada tabla este llena antes de realizar alguna consulta que dependa de otra tabla para no hacer consulta con vacíos y demore más el reporte al igual que al llenar o loopear una tabla)

- Ya que tu GT_REPORTE tendrá todos los campos a mostrar y los que sean comunes entre las tablas a consultar
crearas un fieldcat dependiendo del radiobutton / tabla o como según lo hayas planeado, es o sería la misma idea de como armas el reporte
Por ejemplo...

FORM CREA_FIELDCAT.
------------------------------------------------------------------------------
define add_fcat.
    clear gs_fcat.
    gs_fcat-col_pos = &1.
    gs_fcat-fieldname = &2.
    gs_fcat-coltext = &3.
    gs_fcat-outputlen = &4.
    append gs_fcat to gt_fcat.
  end-of-definition.

IF radiobutton_1 EQ 'X'.

 add_fcat:
     1 'MATNR' 'Material' 18,
     2 'CTDPG' 'Cantidad Programada' 10.

ENDIF.

IF radiobutton_2 EQ 'X'.

  add_fcat:

  1 'MATNR' 'Material' 18,
  2 'CTDPG' 'Cantidad Programada' 10.
  3 'IDNRK' 'Componente'         30 'X',
  4 'MEINS' 'Unid.Med.' 5 '',
  5 'MENGE' 'Cantidad' 10 ''.

ENDIF.
--------------------------------------------------------------------------------------
ENDFORM.

(si te das cuenta la definición por macros es la misma, más la implementación de el fieldcat, osea, que columnas tendrá, dependerá del radiobutton que escogamos en el ejemplo si escogemos el radiobutton_1 solo mostramos dos campos, pero si escogemos radiobutton_2 mostramos esos dos más
algunos campos más,

Recuerda que la tabla GT_REPORTE contendrá en teoría todos los campos combinados ya que en las tablas estos se repiten esto se explico puntos más arriba)

- Ya teniendo el GT_REPORTE único y el GT_FCAT (columnas a mostrar) amarrado al radiobutton que se entendería es como condicionar a la tabla a mostrar en tu llamada al ALV_GRID simple... enviarias solo un GT_REPORTE y un solo GT_FCAT.

(recuerda que solo te estan pidiendo hacer consultas y mostrarlas en un solo ALV sin mayor chiste o funcionalidad por tanto con un ALV_GRID bastaría
estaría demás crearlo con CONTAINER o EVENTOS, tranquila)

.................

Ya con estos TIPS puedes ir avanzando bien en tu programa ya en el almuerzo me preparas tus dudas y finalmente se haría lo del PDF que como te mencioné para eso debe hacerse un smartform con lo que se mostrara y usando una función SAP se hará la conversión para mostrarse como PDF. Pero dejalo para el final, por ahora ordenate bien, arma todo bien y con calma.
Tú puedes! suerte!

No hay comentarios.:

Publicar un comentario