MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   sy-uccom en punto de ampliacion (foro/showthread.php?t=42108)

gaos 09/03/11 22:28:51

sy-uccom en punto de ampliacion
 
Buen día a todos.

Tengo un problema con un requerimiento, me pidieron crear un punto de ampliación en la transacción IPM2 y mandar un popup para ver que ordenes se va a autorizar despues de seleccionarlas, eso no hay problema ya lo manda el popup, el problema es no puedo hacer que me reconozca el user-command ya le intente de varias formas y no funciona, me manda el siguiente error "Incorrect nesting: Before the statement "FORM", th Zeile: 159". les envio el codigo para que lo vean, la verdad no se porque ese error

*Tabla auxiliar a revisar
*Data: Begin Of t_sel_tab Occurs 0.
* Include structure sel_tab.
*Data: End Of t_sel_tab.
*Tabla de Operaciones
Data: t_operations like table of bapi_alm_order_operation_e with header line,
*Tabla de componentes
t_components like table of bapi_alm_order_component_e with header line,
*Tabla de usuarios
ti_zpmiw32 like table of zpm_iw32 with header line
*Tabla auxiliar a revisar
* t_sel_tab like table of sel_tab with header line
.

TYPE-POOLS: SLIS.
* Declaration of Fieldcatalog
DATA: FLDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.

Data: Begin Of t_sel_tab Occurs 0,
check(1) Type c.
Include Structure sel_tab.
Data: End Of t_sel_tab.
*Tabla de avisos de la bapi
Data: Begin Of t_return Occurs 0.
Include Structure bapiret2.
Data: End Of t_return.
*Areas de trabajo
Data: wa_header Like bapi_alm_order_header_e
.

*Variables y constantes
Constants: c_ipm(4) Type c Value 'IPM2',
c_pm0(4) Type c Value 'PM03',
c_x(1) Type c Value 'X'
.
Data: cancel(1) TYPE c
.

*Se revisa que el usuario este en la tabla ZPM_IW32 Tx zpmre018
Select *
From zpm_iw32
Into Table ti_zpmiw32
For All entries In sel_tab
Where bname eq sy-uname
And .
.
.
.
.
.

*Se revisa que la tabla contenga datos y que sea la tx IPM2
If sy-subrc eq space And sy-tcode eq c_ipm.

*Se toman los datos a modificar en una tabla auxiliar
* t_sel_tab[] = sel_tab[].
Loop At sel_tab.
Move-corresponding sel_tab To t_sel_tab.
Append t_sel_tab.
Clear t_sel_tab.
EndLoop.

*Se barre la tabla auxiliar y se toman los datos
Loop At sel_tab.

*Se ejecuta la bapi y se dejan las operaciones con clave PM03 y los
*componente no marcados para borrar
Clear: wa_header, t_operations, t_components, t_sel_tab.
Refresh: t_operations, t_components.

CALL FUNCTION 'BAPI_ALM_ORDER_GET_DETAIL'
EXPORTING
NUMBER = sel_tab-aufnr
IMPORTING
ES_HEADER = wa_header
TABLES
ET_OPERATIONS = t_operations
ET_COMPONENTS = t_components
RETURN = t_return
.

Delete t_operations Where control_key ne c_pm0.
Delete t_components Where delete_ind eq c_x.

*se revisa que las tablas contengan datos
If t_operations[] Is initial And t_components[] Is Initial.
Delete t_sel_tab Where objnr eq sel_tab-objnr.
EndIf.

EndLoop.

If Not t_sel_tab[] Is Initial.

FLDCAT-FIELDNAME = 'AUFNR'.
FLDCAT-COL_POS = 0.
FLDCAT-outputlen = 12.
FLDCAT-SELTEXT_M = 'ORDEN'.
APPEND FLDCAT.
CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'AUFSTAT'.
FLDCAT-COL_POS = 1.
FLDCAT-outputlen = 8.
FLDCAT-SELTEXT_M = 'STATUS'.
APPEND FLDCAT.
CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'KTEXT'.
FLDCAT-COL_POS = 2.
FLDCAT-outputlen = 40.
FLDCAT-SELTEXT_M = 'TEXTO'.
APPEND FLDCAT.
CLEAR FLDCAT.

CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'AUTORIZAR ORDENES'
I_SELECTION = c_x
I_ZEBRA = c_x
I_SCREEN_START_COLUMN = 10
I_SCREEN_START_LINE = 10
I_SCREEN_END_COLUMN = 80
I_SCREEN_END_LINE = 20
I_CHECKBOX_FIELDNAME = 'CHECK'
I_TABNAME = 'T_SEL_TAB'
IT_FIELDCAT = FLDCAT[]
I_CALLBACK_PROGRAM = sy-repid
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IMPORTING
e_exit = cancel
TABLES
T_OUTTAB = T_SEL_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.

IF SY-XCODE eq '&AC1'.
Leave to Screen 500.
ENDIF.

FORM user_command USING ucomm LIKE sy-ucomm
sfields TYPE slis_selfield.

EndForm.


EndIf.

EndIf.

Tu amo 10/03/11 00:20:41

Yo lo que veo ahi es que pusiste un form adentro de un if...

gaos 10/03/11 03:11:54

Asi es porque estoy dentro de un punto de ampliacion, lo que quiero es saber cuando dan doble click sobre una orden, (user-command), anteriormente ya lo habia hecho pero sobre un reporte z y no me dio problema alguno, ahora que estoy con un programa estandar lo que requiero no me acepta, por esa razon solo esta el perform, si lo quito se compila sin problemas, si lo dejo me marca el error que mencione.:confused: no se como hacerle para que me acepte el user-command

kiboqac 10/03/11 11:50:42

Lo que dice "Tu Amo" es correcto; no puedes tener un ENDIF luego del ENDFORM.

Prueba lo siguiente:

----------------------------
----------------------------
IF SY-XCODE eq '&AC1'.
Leave to Screen 500.
ENDIF.

EndIf.

EndIf.

FORM user_command USING ucomm LIKE sy-ucomm
sfields TYPE slis_selfield.

EndForm.


Confirmame si ahi te compila.

gaos 10/03/11 13:53:51

sigue el probelma
 
Pues si :( me sigue marcando el mismo error Incorrect nesting: Before the statement "FORM", th Zeile: 163 ya los saque del if con el mismo resultado, ya estoy dudando si se puede agregar un form a las ampliaciones, si se puede agreagar les agradesco mucho que me saquen de la duda. La cuastion es que del popup que sale el usuario le da click a alguna orden y lo debe llevar a la transacción iw32, en este caso no puedo obtener el user-command de la forma que lo hago :(

Tu amo 10/03/11 16:34:33

Donde estas agregando el punto de ampliacion?
Los puntos de ampliacion generalmente van dentro de rutinas (forms, functions, clases). Obviamente no puedes anidar rutinas dentro de rutinas.

Ese form que tienes ahi (user_command) no tengo idea que es lo que haga.

Si lo que quieres es llamar a una rutina dentro de un punto de ampliacion usa funciones, clases globales o manda llamar forms de un programa externo

gaos 10/03/11 17:41:12

Voy a tratar de ser mas claro :p.

al correr la transacción IPM2 se seleccionan varias ordenes para autorizar, antes de autorizarlas me muestra un popup con las ordenes a autorizar (orden, status, texto), al dar doble click sobre la orden en el popup me debe mandar a la transacción IW33 para saber si se autoriza o no. En ese punto en donde estoy atorado :( no se como cachar el doble click que di en el popup

Tu amo 10/03/11 17:49:35

Asi ya es mas claro, el form es para el manejar el alv del 'REUSE_ALV_POPUP_TO_SELECT'

Yo creo que de esa forma no te va a ser tan facil, por lo mismo de meter un form en la ampliacion

Lo que yo sugiero, por facilidad, es que pongas todo adentro de un modulo de funciones tal como lo tienes. Ahi si puedes declarar forms sin ningun problema

Los datos que estes usando directos del IPM2 mandalos como parametros a la funcion y asunto resuelto. Nada mas mandas llamar esa funcion desde el punto de ampliacion que ya tienes

Saludos

gaos 11/03/11 15:53:19

sin novedad
 
Ya pase todo a a un modulo que he creardo, no toma el user-command. Lo que tengo a grandes razgos es:
FUNCTION ZPM_NOTICE_TO_USER.
intruciones
.
.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = 'AUTORIZAR ORDENES'
I_SELECTION = c_x
I_ZEBRA = c_x
I_SCREEN_START_COLUMN = 10
I_SCREEN_START_LINE = 10
I_SCREEN_END_COLUMN = 80
I_SCREEN_END_LINE = 20
I_CHECKBOX_FIELDNAME = 'CHECK'
I_TABNAME = 'T_SFIELDS_IN'
IT_FIELDCAT = FLDCAT[]
I_CALLBACK_PROGRAM = sy-repid
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IMPORTING
e_exit = cancel
TABLES
T_OUTTAB = T_SFIELDS_IN
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
ENDFUNCTION.
**---------------------------------------------------------------------*
** FORM user_command *
**---------------------------------------------------------------------*
form user_command using pa_ucomm like sy-ucomm pa_tabla type slis_selfield.
* If pa_ucomm eq '&IC1'.
message 'Doble click' Type 'I'.
* EndIf.
EndForm.
De esta forma ya se ha trabajado, poner la funcion y abajo los forms, esta vez no me funciono ¿Que puedo estar haciendo mal?

gaos 11/03/11 15:58:05

olvide mensionarlo, no entra al form user_command


Husos Horarios son GMT. La hora en este momento es 15:53:25.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web