sy-uccom en punto de ampliacion

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • gaos
    Member
    • oct
    • 98

    #1

    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
    Member
    • oct
    • 40

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

    Comentario

    • gaos
      Member
      • oct
      • 98

      #3
      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

      Comentario

      • kiboqac
        Member
        • mar
        • 55

        #4
        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.
        Kibo

        Comentario

        • gaos
          Member
          • oct
          • 98

          #5
          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

          Comentario

          • Tu amo
            Member
            • oct
            • 40

            #6
            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

            Comentario

            • gaos
              Member
              • oct
              • 98

              #7
              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

              Comentario

              • Tu amo
                Member
                • oct
                • 40

                #8
                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

                Comentario

                • gaos
                  Member
                  • oct
                  • 98

                  #9
                  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?

                  Comentario

                  • gaos
                    Member
                    • oct
                    • 98

                    #10
                    olvide mensionarlo, no entra al form user_command

                    Comentario

                    • gaos
                      Member
                      • oct
                      • 98

                      #11
                      Ya vi el problema

                      Ya vi el problema, y esta documentado en este for http://www.mundosap.com/foro/showthread.php?t=28767, al parecer el popup que quiero usar no soporta doble click o algun otro envento, la otra opción que se presenta no me es muy util, pues ni modo asi estan las cosas

                      Comentario

                      • gaos
                        Member
                        • oct
                        • 98

                        #12
                        Ya vi el problema

                        Ya vi el problema, y esta documentado en este for http://www.mundosap.com/foro/showthread.php?t=28767, al parecer el popup que quiero usar no soporta doble click o algun otro envento, la otra opción que se presenta no me es muy util, pues ni modo asi estan las cosas

                        Comentario

                        Trabajando...