PDA

Ver la Versión Completa : USER_EXIT Transacciones ME21N - ME22N


acha3318
05/03/09, 00:37:45
Saludos a todos,

Esta vez necesito una user_exit que tenga efecto sobre las transacciones ME21N y ME22N, precisamente al momento de guardar.

He cacharreado con la BADI ME_PROCESS_PO_CUST, al cual le coloqué un BREAK POINT en la interfaz IF_EX_ME_PROCESS_PO_CUST~POST. y no para al momento de guardar.

La idea es leer la tabla EKKO para hacer unas validaciones sobre los campos FRGKE y FRGZU. Luego tomar sus valores para informar que el pedido está pendiente de liberar, o en su defecto informar que ha sido liberado.

Espero me ayuden con esto. Gracias.

Pletorico
05/03/09, 01:13:57
Hola acha3318. Como te va?

Pues mira, no sé si ya probaste esto pero, hay un programa que circula en la red
que te sirve para detectar todas las user exit de una transacción.
Te puedo decir que solo una vez supe de un caso en el que al amigo de un primo de un conocido (como luego se dice xD) no encontró un user exit adecuado para una transacción con ese programa y un funcional experto encontro uno que era el adecuado pero que no salia en el reporte.
Fuera de eso, te aseguro que a mi siempre me ha dado excelentes resultados.
Tan sencillo como que precisamente hace una semana, implemente un userexit que encontré por medio de este porgramita para la FB60 y otro para la MIRO.
Te agrego el código por aqui mismo, solo le haces copy/paste y espero que no pierda el formato en la maroma. En todo caso si lo necesitas y me lo pides te mando el archivo por correo:
ctrevino_cav@hotmail.com
Saludos y espero que te sirva.

REPORT ZBUSCA_USER_EXIT .
*
* Finding the user-exits of a SAP transaction code
*
* Enter the transaction code in which you are looking for the user-exit
* and it will list you the list of user-exits in the transaction code.
* Also a drill down is possible which will help you to branch to SMOD.
*
* Written by : SAP Basis, ABAP Programming and Other IMG Stuff
* http://www.sap-img.com
*

*report zuserexit no standard page heading.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
tables : tstct.
data : jtab like tadir occurs 0 with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.

select single * from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
select single * from tadir where pgmid = 'R3TR'
and object = 'PROG'
and obj_name = tstc-pgmna.
move : tadir-devclass to v_devclass.
if sy-subrc ne 0.
select single * from trdir where name = tstc-pgmna.
if trdir-subc eq 'F'.
select single * from tfdir where pname = tstc-pgmna.
select single * from enlfdir where funcname =
tfdir-funcname.
select single * from tadir where pgmid = 'R3TR'
and object = 'FUGR'
and obj_name eq enlfdir-area.

move : tadir-devclass to v_devclass.
endif.
endif.
select * from tadir into table jtab
where pgmid = 'R3TR'
and object = 'SMOD'
and devclass = v_devclass.
select single * from tstct where sprsl eq sy-langu and
tcode eq p_tcode.
format color col_positive intensified off.
write:/(19) 'Transaction Code - ',
20(20) p_tcode,
45(50) tstct-ttext.
skip.
if not jtab[] is initial.
write:/(95) sy-uline.
format color col_heading intensified on.
write:/1 sy-vline,
2 'Exit Name',
21 sy-vline ,
22 'Description',
95 sy-vline.
write:/(95) sy-uline.
loop at jtab.
select single * from modsapt
where sprsl = sy-langu and
name = jtab-obj_name.
format color col_normal intensified off.
write:/1 sy-vline,
2 jtab-obj_name hotspot on,
21 sy-vline ,
22 modsapt-modtext,
95 sy-vline.
endloop.
write:/(95) sy-uline.
describe table jtab.
skip.
format color col_total intensified on.
write:/ 'No of Exits:' , sy-tfill.
else.
format color col_negative intensified on.
write:/(95) 'No User Exit exists'.
endif.
else.
format color col_negative intensified on.
write:/(95) 'Transaction Code Does Not Exist'.
endif.

at line-selection.
get cursor field field1.
check field1(4) eq 'JTAB'.
set parameter id 'MON' field sy-lisel+1(10).
call transaction 'SMOD' and skip first screen.

*---End of Program=

acha3318
05/03/09, 12:08:55
Gracias Pletorico, yo tengo implementado el programa lo que pasa es que la ME21N y ME22N tiene muchos user_exit y no estoy seguro cual usar al momento preciso de guardar.

Lo que pasa es que debo hacer lo que ya implementé para las SOLPED, y es el envio de correo (outlook) avisandole al liberador que debe liberar la solped, y esto lo hice por medio de una USER_EXIT de las solped, lo mismo hice cuando el liberador libera, enviá un correo (outlook) al solicitante avisando que ya fue liberada la solped. Y funciona perfecto.

Debo encontrar la USER adecuada en los PEDIDOS, para enviar un correo (outlook) al liberador del pedido avisando que debe liberar tal pedido, y de regreso al comprador avisando que el pedido fué liberado.

En esas ando si alguien me puede dar un empujoncito al menos diciendome cual user, y en ese caso me pongo a poner BREAK para determinar en que evento disparo el correo.

Espero sus comentarios.

Gracias.... ACHA

Pletorico
05/03/09, 16:47:08
Hola acha3318.

Mira, yo lo que hago cuando estoy en esas, es implementar todos los user exit
y ponerles break a cada uno, cuando tengo detectado el user que se detiene
en la parte que me interesa, me lo quedo y los demás los borro.

Sé que esto te puede resultar bastante molesto y "talachero", porque de hecho lo es, pero pues algunas veces no nos queda de otra que entrarle a la prueba y error.

Me avisas si lograste detectar el user exit que necesitas.

Saludos y pues, te deseo suerte.

Truco
06/03/09, 15:43:18
Hola... otra vez yo molestando....

necesito que al momento que se crea una orden de compra en la transaccion me21n necesito que un user exit evalúe si el rut del acreedor existe como "contratado", es decir si es trabajador de al empresa, de ser asi, no deberia dejar emitir la orden de compra.

encontré el user exit EXIT_SAPMM06E_006

pero como saben soy muuuy principiante, entonces, alguien me podria explicar donde debo crear el código para la evaluación??

es posible comprar un campo de mm con uno de hr???, como?... tendré ke hacer un select a la tabla del infotipo 1???

por fa ayuda... otra vez.

Pletorico
06/03/09, 17:42:48
Hola, que tal.
Mira, de hecho yo también creo que para validad si alguien esta contratado por la empresa, habría que ir a los infotipos. Me parece, si mal no recuerdo, que los datos básicos del empleado están en una de dos: hrp1000 o PA0001.
Pero no estoy seguro, necesitarás revisarlo directamente en las tablas.
Ahora bien, la otra cuestión es que el número que tengas en memoria al momento de pasar por el userexit, sea el mismo con el que está registrado en las tablas de rh, no sé si tengas que buscar alguna equivalencia, pero te voy
a dar una recomendación. Si no estás seguro de ese dato, mejor investigalo con el funcional, porque si tú tomas esa decisión y resulta estar equivocada,
vas a tener que cargar al muerto.
Pero basicamente sí es como tú te lo estas imaginando, según me parece.
Tienes que validarlo contra rh para saber si esta dentro del organigrama de la empresa.
Espero haberte ayudado aunque sea un poco.
Ahí me platicas después como te fue.
Suerte y Saludos.

vickxo
09/03/09, 10:18:32
Bueno, inetntando ayudar a acha3318 yo lo que hago para saber que exit activar es entrar a la transaccion, y poner los datos que necesite para el proceso a evaluar y para tu caso justo antes de darle al boton guardar en el campo de comandos escribo /h para empezar el debuggin, le doy ahora si al boton guardar y empezare en el modo debuggin pero en lugar de dar F6,F8 u F5 lo que hago es irme al menu BREAKPOINTS -> BREAKPOINT AT-> BRAKPOINT AT STATEMENT y en ABAP Cmsnd pongo CALL CUSTOMER-FUNCTION y con eso me pondra un break point en todas las llamadas que haga a las user exits que esten en el evento de guardar y con eso te ahorrar activar "TODAS" las user exit por solo aquellas que te interesan e incluso ahi puedes ir viendo que datos son los que manda para irte moviendo ahora si le das F8 para que pare en el siguiente breakpint, espero te ayude

blankiverde
31/03/09, 15:24:44
Yo necesito una badi o exit con la que poder acceder, además de a los datos de EKPO y EKKO, a los de ESLL. Ya sea al momento de validar un campo, o de grabar el documento.

A ver si alguien ha estado en alguna tesitura parecida y sabe de alguna.

Gracias.

braschilester
02/06/09, 21:45:49
Amigos Necesito Ayuda para este tema:

Cuando uno hace una Orden de compra (ME21N) para un pedido de importación.

Necesito que el pedido: traiga por defecto el esquema de cálculo de la importación Esto es el valor neto: de la que estoy comprando+ costo aduanero+consolidación+flete


braschilester@hotmail.com cualquier ayuda pls

braschilester
03/09/09, 03:07:44
Se busca modificar la actual lógica de proceso correspondiente al proceso de liberación de un pedido de compra a través de las transacciones ME28 y ME29N, permitiendo que dicho proceso no bloquee la

posterior modificación a través de la transacción ME22N. Por otro lado, se busca que los cambios asociados a los campos mencionados a continuación dentro de la transacción ME22N de un pedido ya liberado, gatille nuevamente

el bloqueo de este para que nuevamente deba generarse la liberación de este.

· Condición de pago

· Material

· Cantidad pedido

· Precio Neto

braschilester
03/09/09, 03:21:46
1.- Se busca modificar la actual lógica de proceso correspondiente al proceso de liberación de un pedido de compra a través de las transacciones ME28 y ME29N, permitiendo que dicho proceso no bloquee la

posterior modificación a través de la transacción ME22N. Por otro lado, se busca que los cambios asociados a los campos mencionados a continuación dentro de la transacción ME22N de un pedido ya liberado, gatille nuevamente

el bloqueo de este para que nuevamente deba generarse la liberación de este.

· Condición de pago

· Material

· Cantidad pedido

· Precio Neto





2.- Se busca poder restringir el porcentaje de Tolerancia de exceso de suministro a un valor tope previamente definido cuando se crea o modifica un pedido de compra. Es decir si un usuario al momento de crear o modificar un pedido de compra en las transacciones mencionas en el análisis que se había hecho con antelación, la idea es que si npone un porcentaje mayor al definido el sistema no te permita grabar y arroje un mensaje ( es decir restringir el porcentaje a un tope)

nikolaprida
09/02/10, 12:17:25
tuve que hacer uno para las mismas transacciones, y para la me21n y la me22n bah en realidad para todas las de modificacion creacion y liberacion de ordenes tenes q usar la me_purchdoc_posted. en esta hay varios parametros para utilizar con los datos...luego por ejemplo en la me22n y la me32k, lo bueno seria hacer un field exit al momento de querer modificar la orden. tambien procura verificar q transacciones abarca, es decir antes de hacer cualquier cosa pone un if sy_tcode = me22n, por ejemplo con todas las q entren

saludos

Eng
13/05/10, 05:09:40
el user exit que te hace eso es el siguiente.
si esta aplicada la siguiente nota 329898
EXIT_SAPLEBND_002
si no esta aplicada.
CUSTOMER-FUNCTION '002'

recibes 2 estructuras
I_CEKKO datos de cabecera de factura, recibe user exit
E_CEKKO datos de cabecera de factura, es la estructura k devuelve el user exit
IT_BEKPO tabla interna con todas las posiciondes del pedido.

te anexo el programa standar donde se encuentra
MM06EF0S
*-----------------------------------------------------------------------
*- Änderungen:
*- HinwNr Datum Rel. Autor Text
*- 82583 03.09.97 31I TS me59, Umlagerung: keine Kalk.schemaermitt
* 83917 15.10.1997 3.1I GT : Löschen Streckenpos. Bestellwert fakturier

*eject
************************************************************************
* *
* Unterroutinen Bestellabwicklung *
* Routinen alphabetisch geordnet; hier beginnend mit "S" *
* *
************************************************************************

INCLUDE MM06EF0S_SEPO_FUELLEN . " SEPO_FUELLEN

INCLUDE MM06EF0S_SD_AEND_VORBEREITEN . " SD_AEND_VORBEREITEN

INCLUDE MM06EF0S_SD_FLUSS_VORBEREITEN . " SD_FLUSS_VORBEREITEN


INCLUDE MM06EF0S_SD_CHECK_LOEKZ . " SD_CHECK_LOEKZ

INCLUDE MM06EF0S_STAMM_BANF . " STAMM_BANF

INCLUDE MM06EF0S_STAMM_BESTAND . " STAMM_BESTAND

INCLUDE MM06EF0S_STAMM_INFOSATZ . " STAMM_INFOSATZ

INCLUDE MM06EF0S_STAMM_LIEFERANT . " STAMM_LIEFERANT

INCLUDE MM06EF0S_STAMM_MATERIAL . " STAMM_MATERIAL

INCLUDE MM06EF0S_STAMM_ORDERBUCH . " STAMM_ORDERBUCH


INCLUDE MM06EF0S_STAMM_QUOTIERUNG . " STAMM_QUOTIERUNG

INCLUDE MM06EF0S_STATISTIK_VORBEREITEN . " STATISTIK_VORBEREITEN

INCLUDE MM06EF0S_STEUERSCHEMA . " STEUERSCHEMA

INCLUDE MM06EF0S_SCHEMA_SETZEN . " SCHEMA_SETZEN

INCLUDE MM06EF0S_STEUER_US . " STEUER_US

INCLUDE MM06EF0S_SET_VAKE_KOTABNR . " SET_VAKE_KOTABNR

INCLUDE MM06EF0S_STRATEGIE_ERMITTELN . " STRATEGIE_ERMITTELN aki se encuentra el user exit

INCLUDE MM06EF0S_STRATEGIE_CEKKO . " STRATEGIE_CEKKO
INCLUDE MM06EF0S_STRATEGIE_AEND_CHECK . " STRATEGIE_AEND_CHECK

INCLUDE MM06EF0S_SUBTRACT_BZTEK . " SUBTRACT_BZTEK

INCLUDE MM06EF0S_SLL_DOCUMENT_TRANSFER .

lee este articulo para que tengas una idea mas clara.
https://wiki.sdn.sap.com/wiki/display/ERPSCM/RELEASE%20PROCEDURE
si gustas te mando el codigo de como lo implemente.
Enrique234704@hotmail.com

Klare
03/05/11, 11:55:03
Holas,
Neceisto saber una user exit para el pedido me21n
al momento de crear un activo en curso necesito q' la user me salte al momento de verificar cuando ya haya seleccionado mi activo y asi poder hacer mi validacion.
si alguien me puede ayudar se lo voy agradecer......

contab15
16/08/22, 19:31:10
Buenos Dias Equipo SAP, sabran alguna Exit BTE BADI que me realice las retenciones al proveedor sobre el lugar de entrega de un Pedido de Compra

Gracias