MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 09/03/11, 22:28:51
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
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.
Responder Con Cita
  #2  
Viejo 10/03/11, 00:20:41
Tu amo Tu amo is offline
Member
 
Fecha de Ingreso: oct 2010
Mensajes: 40
Yo lo que veo ahi es que pusiste un form adentro de un if...
Responder Con Cita
  #3  
Viejo 10/03/11, 03:11:54
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
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. no se como hacerle para que me acepte el user-command
Responder Con Cita
  #4  
Viejo 10/03/11, 11:50:42
Avatar de kiboqac
kiboqac kiboqac is offline
Member
 
Fecha de Ingreso: mar 2007
Localización: Argentina
Mensajes: 55
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.
Responder Con Cita
  #5  
Viejo 10/03/11, 13:53:51
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
Unhappy 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
Responder Con Cita
  #6  
Viejo 10/03/11, 16:34:33
Tu amo Tu amo is offline
Member
 
Fecha de Ingreso: oct 2010
Mensajes: 40
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
Responder Con Cita
  #7  
Viejo 10/03/11, 17:41:12
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
Voy a tratar de ser mas claro .

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
Responder Con Cita
  #8  
Viejo 10/03/11, 17:49:35
Tu amo Tu amo is offline
Member
 
Fecha de Ingreso: oct 2010
Mensajes: 40
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
Responder Con Cita
  #9  
Viejo 11/03/11, 15:53:19
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
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?
Responder Con Cita
  #10  
Viejo 11/03/11, 15:58:05
Avatar de gaos
gaos gaos is offline
Member
 
Fecha de Ingreso: oct 2006
Mensajes: 98
olvide mensionarlo, no entra al form user_command
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 20:10:13.


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