miércoles, 22 de febrero de 2017

SUBMIT EXPORT / 22.02.2017 (ACTUALIZADO CON POSIBLE RESPUESTA)

Investigando,

El SUBMIT hay varias paginas donde indican que el RETURN que puedes traer lo que sale en la pantalla del programa que llamas osea un LIST y algo más, lo cuál viene desordenado y es un montón de código... pero... hay un post donde indican que quieren traerse la tabla (interna) de salida del programa base y la idea sería la siguiente:

- modificar el programa base y antes de la salida de su ALV o terminando de generar la tabla que se quiere obtener hacer un EXPORT ... TO MEMORY de esa tabla, luego en el programa nuevo luego de hacer el SUBMIT hacer el IMPORT ... TO MEMORY, recordar que en ese export / import se podría en teoría estar trayendo la tabla interna que se desea.

Te dejo el link, seguiré investigando están probando un cambio y por pasarme otros, si puedo pruebo esta teoría...

https://archive.sap.com/discussions/thread/989633

Si en caso pueda y encuentro algo más iré actualizando este post, atenta si tienes tiempo.

ánimos y éxitos!!!!!

ACTUALIZACIÓN 22.02.2017 - 11:00 am

Aquí maso una idea de lo que digo...

https://wiki.scn.sap.com/wiki/display/ABAP/Sample+ABAP+Program+to+EXPORT+or+IMPORT+internal+table+TO+or+FROM+ABAP+Memory

ACTUALIZACIÓN 22.02.2017 - 11:05 am

This example shows both export internal table to memory and also list to memory. (Este ejemplo muestra como traer una tabla interna por memoria y también lista de salida a memoria)

CONSLUSIÓN: nos importa lo primero, la salida en lista, es lo que el programa bota osea la pantalla, a eso se le llama lista de salida.

https://archive.sap.com/discussions/thread/39352

En el programa que haces el SUBMIT no sería necesaria la linea EXPORTING LIST TO MEMORY, solo defrente el RETURN ya que no necesitas traer la lista de salida sino solo llamar al pgm y que dentro de su codigo hace el export.
OJO CON ESO! no te vayas a marear.





viernes, 17 de febrero de 2017

LEER DYNPRO - 17/02/2017

Disculpa no he podido darle mucha vuelta, si me explicas un poco mejor por ahi que encontramos una mejor solucion, pero maso creo el primer link te ayudará, es o serviría para cuando actualices un campo en una dynpro este se quede en la dynpro.

http://www.mundosap.com/foro/showthread.php?t=5413

https://danielpanaro.wordpress.com/2010/04/29/c14z_dynp_read_field-funcin-para-leer-campos-de-una-dynpro/


Saludos

miércoles, 15 de febrero de 2017

LOG DE ERRORES STMS

En la STMS...

verifica bien el orden en que se transportan, las horas y cosas así, recuerda en ARES nos dimos cuenta que paso mal una OT a destiempo de otra..





lunes, 13 de febrero de 2017

DEBUG SMARTFORM - PEDIDO ESPECIAL

Pasos para debug a un smartform... 
de por si es dificil pero es más accesible si tiene nodos con códigos como en este siguiente caso...
se ubica el nombre de linea de programa y el nodo (DATOS_EMPRESA) que vendría a ser el nodo (VENTANA) y el codigo agrupado con el nombre DATOS_EMPRESA de la misma manera... se procede  a ejecutar el smartform para ver el fm modulo de función del smartform
Se ingresa en modo visualización y se pone busqueda avanzada y se puede ingresar o bien el nombre del NODO/VENTANA o LÍNEAS DE PROGRAMA que en este caso es el mismo... se busca en todo el pgm (modulo de función) 
Y tal como se observa hay dos coincidencias, al tener el mismo nombre la ventana y la linea de codigo aparecerá en nuestra busqueda dos veces por tanto por jerarquia escogemos la segunda que haría referencia al código...


Y una vez ubicado en las lineas de codigo podremos ahí recien poner nuestro break point de tal manera que al ejecutar el proceso / pgm / o desde la misma tx. smartform que llame a este mismo,
se parará por el break en el momento que hayamos indicado.


Espero te mejores y reconsideres lo de nuestra cita de hoy ... he estado aguantando desde el viernes :( ...
 porfa!











jueves, 9 de febrero de 2017

ME23N CALL TRANSACTION



Considerando que todo el dato de la OC se quedará en el segundo ALV lo que haremos es al momento de generar el fieldcat para el ALV cambiarle el hotspot de IDNRK (componente) a EBELN (OC) de tal manera que en el método haríamos este cambio.


Tener en cuenta que la transacción ME23N tiene un campo donde se le ingresa la OC y para hacer la sentencia CALL TRANSACTION se necesita que dicho campo tenga un ID de parametro...
es por eso que a veces, no todas las transacciones se le puede hacer un call transaction con algunos datos directo ya que no todos cuentan con campos que tengan dicho ID, notar en la imagen anterior que se usa dicho ID para enviar el dato a ingresar en la ME23N.


******************************************
Jueves 09 am
Disculpa la tardanza me quede sin luz plan de 12am cuando estaba terminando se quedo en borrador la publicación eso y que amanecí con un dolor de cabeza como un clavo en la frente... en fin

exitos, me llamas como te va...
PD: en caso quieran lo del pop up ya esta en el post / publicación anterior el como hacerle, paso por paso, leelo!!!!!!!!

miércoles, 8 de febrero de 2017

MIERCOLES 08/02/17 (LEER HASTA EL FINAL)

Se explicaran dos cosas en este POST, la funcionalidad ALV POP-UP (primero) y las modificaciones a hacer, bosquejo, para que ese ALV POP UP llame a las OC asignadas al componente seleccionado.

PRIMERO:

Pasaré a explicar los puntos donde se configura para llamar al ALV POP - UP. Con lo que tenias hasta ahorita.

- En el include F01 se tiene el armado del FIELDCAT por ALV, para el caso del ALV DETALLE (ALV 2) se incluyo tener en cuenta la propiedad HOTSPOT (hipervinculo) se configuro en la macro
considerar esta propiedad, DEFINE ADD_FCAT2. Y al momento de declarar esa macro, al campo IDNRK se marco que tuviera 'X' esta propiedad. Por ende el campo IDNRK se mostará como un hiperviculo.


- En el include CLS se creo una clase y un evento HOTSPOT_CLICK que se agregaría luego al ALV2. Este metodo serviria para que reconozca cuando a un campo con propiedad HOTSPOT se le haga click y haga lo que este implementado dentro del codigo tal como se ve en la imagen. Tener en cuenta que el READ TABLE gt_stpo se cambiaria por READ TABLE gt_alv2 ya que reconocerá
lo que se envie a mostrar como ALV2


- En el PBO (procesos antes de salida) al momento de llamar al ALV 2, antes de llamarlo se le asigna este EVENTO para que lo considere en su salida.


- Se hace un pequeño debug a estos codigos y corroborar estaría trayendo lo que se selecciona, sobretodo la FILA. Y como se observa al dar click a un componente se activa el metodo
y reconoce la fila de la tabla interna mencionada (que repito, debe ser la misma que se muestra en el ALV2, en este ejemplo la GT_STPO) y a partir de eso se puede saber el valor del componente para esa fila seleccionada (IDNRK)


Con esto quedaría explicado la funcionalidad del ALV POP UP.

SEGUNDO:

Pasaré a explicar lo que sería la lógica (un bosquejo) para que ese ALV POP - UP muestre datos de OC de un solo componente, el que se seleccione.

- En el top se crearía una estructura para lo que sería la tabla a mostrar en el ALV POP UP. Aquí se trabajara con dos tablas con las mismas estructuras. la GT_OC que tendrá los registros de OC para todos los componentes del ALV2 y una GT_OC_AUX que será alimentada por la primera pero solo mostrando los datos que coincidan con el componente seleccionado. Para este ejemplo se creo una estructura basica que comprende de IDNRK y MENGE.


 - En el metodo previamente explicado en el primer punto, se hará la lógica donde la GT_OC_AUX se refrescara y se le hará el traspaso de todos los registros de la GT_OC original (madre) y dento del READ TABLE ya que se puede obtener el valor del componente seleccionado, se hará un delete a la GT_OC_AUX donde elimine todos los componentes sean distintos al seleccionado.


- Ahora como se ve, antes de la llamada al screen 0120 se tendrá un nuevo GT_OC_AUX por cada que se seleccione un componente.

RECORDAR:

El screen 0120 al llamarlo activa el STATUS_0120 y el USER_COMMAND 0120 por tanto veamos que trae el STATUS_0120


Como observamos el STATUS_0120 que se activa al llamar a la dynpro 0120 hace llamada al ALV que se mostrara en ese POP UP y dicho ALV esta usando como tabla interna a mostrar la GT_OC_AUX que se alimento antes del CALL SCREEN 0120.



... Y con eso quedaría listo... solo faltaría llenes el GT_OC considerando que debe tener el campo IDNRK para que el metodo funcione y alimente correctamente a la GT_OC_AUX y se muestre por componente en el ALV POP UP, sin problemas.

Ahora para llenar la GT_OC ya que mencionas traera datos de otras 3 tablas puedes hacer lo siguiente : así como el GT_REPORTE o GT_ALV1 , GT_ALV2, traen datos de otras TABLAS , harías lo similar
creas tablas internas por cada tabla para todo lo relacionado a la OC y la tabla matriz le harías LOOP y armarías cada registro de la OC, asemejalo a como cuando armas el GT_REPORTE y mentaliza bien cual seria tu tabla matriz, que entendería sería la principal donde sacas todas las OC amarradas a los componentes.

EXITOS!

FUERZA!

SI SE PUEDE!

CON CALMA!

...

cualquier duda no olvides comentar

lunes, 6 de febrero de 2017

LUNES 06/02/2017

LINK DROPBOX: https://www.dropbox.com/sh/gqwqgwq2w2gvnle/AADHaP3Z0s_Id5B3p_uWl4Tma?dl=0



recomiendo cargar el pgm como temporal en tu sistema y asi evitas estar viendo a cada rato un block de notas o el blog

Por favor cualquier duda comenta...!

Se realizo lo siguiente:
-Consolidado aparezca en la cabecera y en el excel
-Funcionalidad para llamar a POP-UP, falta indicar el ALV que mostrara,
 por ahora llama al stpo solo algunos campos, recordar que si bien el GT_STPO tiene
varios campos el fieldcat indicará cuales se mostraran.
-Cada ALV viene con su barra de herramientas y si bien tienen una descarga de fichero
solo descargará (por teoría) lo que se visualiza.
-Se creo el boton descarga desplegable en donde botaría todos los 28 campos,
por el momento se trabajo con algunos básicos para probar que se esta enviando el consolidado
por cada componente...
son 4 cantidades:

- Cantidad Base
- Cantidad Programada (ingresada por pantalla)
- Cantidad Componente Programada (la regla de 3 simple, esta en la especificacion, es como multiplicar cantidad programada por base)
- Cantidad Consolidada Programada (es la suma de cada Cantidad Componente Programada) por material, es lo que aparece en el ALV1 de cabecera, se repite este consolidado por cada componente.

Quedaría pendiente y para lo cuál exitos y paciencia para que salga,
- ALV pantalla de seleccion, intenta no combinar todo, usa rutinas..
- Lo que se muestre en el pop up llenarlo en el excel.. aqui puedes hacer lo siguiente, es una idea...
    1. crear una tabla interna que te jale las OC de todos los componente que saque tu función por material / materiales, para esto ya debes estar fuera del loop de materiales y tener todo tu desplegable o más simple, tomar al ALV1 que te trae los componente sin repetición.

Usar ese ALV1 el codigo de componente como for all entries para sacar las OC amarradas a ese componente y guardarlas en una tabla interna GT_OC por ejemplo.. Esta gt_oc le puedes agregar luego los otros campos para un ALV3.

2. Al momento de llamar al pop-up llamarías a ese ALV3 pero eliminarias todos aquellos componentes distintos al que haz marcado, en el call screen 120 si haces debug veras que te puede reconocer el valor del campo que has seleccionado.

3. Para agregar estos registros al excel, verás que se agrego una rutina que arma el excel, en esta rutina se le agrega el campo consolidado... para agregar los registros de OC para un mismo componente harías un loop a tu GT_OC dentro del loop GT_eXCEL  amarrando por componente y cada que encuentre añadiendolo al GT_EXCEL pasandole los demas datos inciales.

4. Exitos con calma

********************************************************************************
En el link que te pasaré del dropbox esta todo el pgm con dynpros y todo, para las dynpro solo basta que crees una con el mismo nombre ... en el codigo le das doble click a donde dice CALL SCREEN le das click al numero de dynpro y te pedirá para crearla, cuando la crees le das un nombre y para no crear todo el diseño, le das al UPLOAD que ves en la imagen y cargara toda la configuracion de container y marcos ya luego podrás modificar ... pero ahorraras algo de tiempo, lo mismo para el SCREEN 0120.


Recuerda que cada Screen cuenta con su PAI (procesos luego de salida screen) y PBO (procesos antes de salida screen)  para el caso del PBO del screen 0120 (pop up) notar que llama por el momento al gt_stpo, recuerda que este se cambiara por algo como por ejemplo GT_OC eliminando previamente todos aquellos componentes distintos al que se selecciono.


En cuanto a los user command (PAI) estos son similares solo que en la de la dynpro 0110 la principal tiene el boton de descargar excel desplegable...


Por el momento sale así el excel, en cuanto a las cabeceras por alguna razon no pasa el titulo completo que le cree en el fieldcat, puedes probar con otras funciones para alv o por ultimo no pasarle la propiedades cabecera TL_NAME en la función, OJO para el caso de numericos
nota en el codigo que pase los tipos numeros a tipo char, esto porque me daba DUMP cuando le ponia un titulo a esos campos...


Aqui puedes ver la funcion &EXC por si gustas guiarte...


En la carpeta esta guardado include por include y las dynpros como te mencione


Esta es la parte donde se llama al ALV pop up aqui puedes restringir o por debug ver para que antes de la llamada al GT_OC elimines todos aquellos cuyo componente sea distinto al que seleccionaste...
debugea y mira que campos te trae cuando seleccionas mira cada variable

RECOMENDACION: para que la GT_OC siempre tenga las OC de todos los componentes y no borres y tengas que volver a cargar, recomiendo crees un GT_OC_AUX donde le pases todos los registros de la GT_OC pero que a este si le elimines los distintos al componente que seleccionas, obviamente refrescar y vuelves a cargar cada que llama al POP UP



 Asi es como se ve el reporte con el boton excel

Los status son los mismos para cada screen salvo el del 110 que tiene el boton excel,
estos status si vas a tener que crearlos dandole doble click cuando el pgm los llama, donde dice 'ZSTATUS_0110' o 'ZSTATUS_0120' al igual que la creación de dynpros, le das doble click y te saldra para crear status o titulos


como mencione tambien te da para crear titulos cuando le das al momento de su llamada en el codigo.


Espero haber ayudado algo ... ya luego conversamos, con calma y exitos, despacio pero segura, y machaca a quien hizo la especificacion que no concuerda lo que escribe con lo que muestra en sus imagenes o no es claro mucho menos el ejemplo del excel no concuerda con lo de  sus pantallas, en fin.

Exitos! y Fuerza!

viernes, 3 de febrero de 2017

CALL FUNCTION 'CS_BOM_EXPL_MAT_V2

Envío aquí unos links donde gente comparte algunos casos y consultas para la función... tales como...
solo despliega el primer nivel, restringir a que nivel desplegar...

Aquí un usuario da ejemplo en código de como uso la función


http://www.abap.es/foro/index.php?topic=162.0

así como esta hay otra página que mas o menos intenta explicar para que sería cada campo

https://archive.sap.com/discussions/thread/38268


Ejemplo PGM Z para probar la función (leer los comentarios)

REPORT  ZRCS11001.

DATA: pm_mtnrv LIKE mara-matnr,
      pm_werks LIKE marc-werks,
      pm_stlal LIKE stko-stlal,
      pm_capid LIKE tc04-capid.
DATABEGIN OF STB OCCURS 1000.
         INCLUDE STRUCTURE STPOX.
DATAEND OF STB.


"no olvidar que en cada APPEND realizado
"linea abajo limpiar el work area en este caso el LS_RCMAT

CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
 EXPORTING
   CAPID                       = 'PP01'
   DATUV                       = sy-datum
   EMENG                       = 1
   MEHRS                       = 'X'
   MTNRV                       = pm_mtnrv
   STLAL                       = pm_stlal
   WERKS                       = pm_werks
  TABLES
    STB                         = stb.
IF SY-SUBRC <> 0.
  "Aquí si no encuentra nada debería saltarse al siguiente material
  "si estas dentro de un LOOP a materiales (ojo, loop a materiales)
  "deberás poner CONTINUE, así se saltará todo el código que viene
  "debajo y aplicar la función para el siguiente material
  "o solo poner la logica para que agregue una sola linea a tu
  "gt_rcmat
***************************************************
  "Una observación a tu LOOP AT lt_stb es que deberías ponerlo
  "dentrod de este ELSE que esta debajo ya que eso indicara
  "que se encontro un despliegue y hacerle toda la logica
  "para que cada registro se ingrese en el gt_rcmat
ELSE.
ENDIF.

Imágenes del debug y análisis...

EMENG





DEBUG PROGRAMA Z QUE LLAMA A LA FUNCIÓN



Con esto quedaría la duda sobre si la función despliega todo, se ve que en un primer momento o para la mayoría de caso salvo, nunca se sabe, excepciones.. pero con esto ya quedaría y no sería necesario llamar dentro de tu LOOP de materiales a la función más que una sola vez. así como limpias el work area luego de cada APPEND podrías probar al iniciar cada LOOP al igual que tu tabla LT_STB hacerle un refresh antes de cada llamada a la función, no vaya a ser que se quede pegado para un material... ojo con esas cosas, no esta demás darle una vuelta.

*****************************************************************************
******************************************************************
Espero haya sido de ayuda mi aporte... espero mi premio mi gran gran gran premio (ya sabes cuál como y donde, con todo completo O-R-A- ...)

Exitos y dale, si no sale algo comenta el blog o si hay roche investiga en internet sobre la función  o algún campo, si se puede! ánimos!

No olvides siempre limpiar las variables donde se debe y hacer bien las asignaciones, vas bien!

Saludos





jueves, 2 de febrero de 2017

CS11 DEBUG

Haciendo DEBUG al siguiente standar ... RCS12001
me encontré con que llenaba esta tabla STB y posteriormente esta llenaba otra que iba al ALV de la CS12 que muestra lo mismo que la se CS11, puede que el programa sea el mismo, o buscar el standar de la CS11 (RCS11001).

'CS_BOM_EXPL_MAT_V2'

En la CS11 se ve el material desplegado... sin contar con los de etiqueta amarilla (que son los que se van a desplegar en sub niveles) quedarían 38 componentes en 3 niveles... tal como se ve en la imagen del excel descargado





Se ejecuto el pgm estandar para ver el llenado de la tabla que muestra el ALV


Como se ve en un primer momento antes de pasar por la función la tabla STB que luego alimenta a la ALV_STB esta en cero...

haciendo un analisis a la tabla llenada ... la STB
se observa que cuenta con datos de niveles descripcion de componente


codigo del componente lista de material proveniente y otros datos más por analizar... el que haya una lista de materiales distintos es porque se trata luego del primer nivel a cada componente como un material nuevo relacionandolo con el principal..


Si se analiza la función se le pasan algunos datos que aun quedan por analizar pero entre los principales estan la aplicación el material / producto final ... el centro la lista alternativa entre otros (REVISAR)



Si se ve en la MKAL estos datos se tienen para usar...


Finalmente el pgm llama al ALV enviando la ALV_STB que fue llenada en un origen por la STB.


Dejo los links donde subi los EXCEL con el ITAB de la STB luego de llenarse por la función y la tabla de la CS11 con los 38 componentes en sus distintos niveles. Cambiarle la extensión a los archivos por xls o abrirlos con excel (con el abrir con ... )

https://www.dropbox.com/sh/1x15r4hikybx7mh/AACTnkdGkO3Zopfx81MKKWU2a?dl=0

Espero haber sido de ayuda...