at line selection con call transaction

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • juanmgdelomana
    Member
    • dic
    • 47

    #1

    at line selection con call transaction

    Hola, buenas a todos:

    Tengo una duda, estoy sacando un listado simple con varios registros y quiero que una vez sea pinchado uno determinado se haga un call transaction cogiendo un campo de ese registro seleccionado. El problema es que no me llega a lanzar el call transaction y no veo cual es el problema.

    Os dejo el código, a ver si algún alma caritativa me puede ayudar.

    Gracias.

    tables: caufv, qals.

    data: va_aufnr like caufv-aufnr.

    data: begin of it_aufnr occurs 0,
    aufnr like caufv-aufnr.
    data: end of it_aufnr.

    data: begin of it_trazbi_sem occurs 0,
    charg like qals-charg,
    prueflos like qals-prueflos.
    data: end of it_trazbi_sem.

    SELECTION-SCREEN BEGIN OF BLOCK B0 WITH FRAME.
    PARAMETERS: Ciclo like caufv-cy_seqnr OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B0.

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ciclo.

    START-OF-SELECTION.

    perform selection.

    end-of-SELECTION.

    set PF-STATUS 'ZSTATUSTRAZABILIDAD'.

    perform write.

    at LINE-SELECTION.

    if not it_trazbi_sem-prueflos is initial.

    SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
    call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

    else.

    MESSAGE s001(z1).

    endif.


    form selection.

    select aufnr
    from caufv
    into CORRESPONDING FIELDS OF TABLE it_aufnr
    WHERE cy_seqnr = ciclo.


    SELECT charg prueflos
    from qals
    into CORRESPONDING FIELDS OF table it_trazbi_sem
    FOR ALL ENTRIES IN it_aufnr
    where aufnr = it_aufnr-aufnr.

    endform.


    form write.

    loop at it_trazbi_sem.
    write: /, at 10 it_trazbi_sem-charg,
    at 30 it_trazbi_sem-prueflos HOTSPOT.
    hide it_trazbi_sem-prueflos.
    endloop.
    clear it_trazbi_sem.

    endform.
  • robert_milan
    Senior Member
    • jun
    • 315

    #2
    Puede ser que la linea que estas leyendo no es correcta:

    Mira te pongo un ejemplo de un informe en donde los datos empiezan apartir de la linea 3. Verifica esto.

    REFRESH BDC_TAB.
    CHECK SY-CUROW >= 3.
    IF SY-CUCOL <= 10.
    PERFORM DYNPRO USING:
    'X' 'SAPMF05L' '0100', "Pantalla
    ' ' 'RF05L-BELNR' ITAB-CONTRATO, "campo contrato
    ' ' 'RF05L-BUKRS' ITAB-BUKRS, "campo sociedad
    ' ' 'RF05L-GJAHR' ITAB-GJAHR. "campo ejercicio
    * ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
    CALL TRANSACTION 'FBD3' USING BDC_TAB.
    ELSEIF SY-CUCOL >= 80.
    PERFORM DYNPRO USING:
    'X' 'SAPMF05L' '0100', "Pantalla
    ' ' 'RF05L-BELNR' ITAB-DOC, "campo contrato
    ' ' 'RF05L-BUKRS' ITAB-BUKRS, "campo sociedad
    ' ' 'RF05L-GJAHR' ITAB-GJAHR. "campo ejercicio
    * ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
    CALL TRANSACTION 'FB03' USING BDC_TAB.
    ENDIF.


    Saludos!!!
    Un Huevon No Inútil


    Solo di lo que piensas, a la mejor tienes la mejor respuesta....

    Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

    Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

    Consultor FI jr/ABAP Sr.

    Comentario

    • juanmgdelomana
      Member
      • dic
      • 47

      #3
      Es una buena idea, pero creo que no se trata de eso... He estado debueando el programa y ni siquiera llega al evento at line selection. Muchas gracias por tu colaboración. Seguire peleando con ello.

      Comentario

      • mysmb2
        Senior Member
        • ene
        • 406

        #4
        probe tu codigo, no tuve problemas en ejecutar el call transaction, hace un /h cuando pichas un registro (pick).
        lo unico que cambie fue el status, fijate capaz es eso.
        Saludos.
        Sebastián Chiavia
        http://www.programacionabap.com.ar

        Comentario

        • robert_milan
          Senior Member
          • jun
          • 315

          #5
          Mira te dejo el ejemplo completo,

          REPORT zfiinf_contratos NO STANDARD PAGE HEADING.

          TABLES: bkpf, "Cabecera de documento para Contabilidad
          bseg, "Segmento de documento de Contabilidad
          kna1. "Maestro de clientes (parte general)

          **********************
          *TABLAS INTERNAS
          **********************
          DATA: BEGIN OF itab OCCURS 0,
          contrato LIKE bkpf-dbblg,
          cod_cli LIKE kna1-kunnr,
          nom_cli LIKE kna1-name1,
          doc LIKE bkpf-belnr, "documento contable
          gjahr LIKE bkpf-gjahr, "ejercicio
          bukrs LIKE bkpf-bukrs, "sociedad
          END OF itab.
          DATA flag.

          *Para cuando se llama a las transac. FB03 y FBD3
          DATA: BEGIN OF bdc_tab OCCURS 0.
          INCLUDE STRUCTURE bdcdata.
          DATA: END OF bdc_tab.

          **********************
          *PANTALLA DE SELECCION
          **********************
          SELECT-OPTIONS contrato FOR bkpf-dbblg OBLIGATORY.


          **********************
          *CABECERA
          **********************
          TOP-OF-PAGE.
          PERFORM cabecera.


          **********************
          *START OF SELECTION
          **********************
          START-OF-SELECTION.

          SELECT * FROM bkpf WHERE dbblg IN contrato.
          *el cliente no va a cambiar, así que entramos una sola vez en la BSEG
          *para encontrarlo
          SELECT * FROM bseg UP TO 1 ROWS WHERE bukrs = bkpf-bukrs
          AND belnr = bkpf-belnr
          AND gjahr = bkpf-gjahr.
          SELECT SINGLE * FROM kna1 WHERE kunnr = bseg-kunnr.
          ENDSELECT.
          MOVE kna1-kunnr TO itab-cod_cli.
          MOVE kna1-name1 TO itab-nom_cli.
          MOVE bkpf-dbblg TO itab-contrato.
          MOVE bkpf-belnr TO itab-doc.
          MOVE bkpf-gjahr TO itab-gjahr.
          MOVE bkpf-bukrs TO itab-bukrs.
          APPEND itab.
          CLEAR itab.

          ENDSELECT.


          *ESCRIBIMOS.

          LOOP AT itab.
          AT NEW contrato.
          flag = 'X'.
          ENDAT.

          IF flag = 'X'.
          CLEAR flag.
          WRITE:/(10) itab-contrato HOTSPOT,
          15(10) itab-cod_cli,
          30(35) itab-nom_cli,
          80(10) itab-doc.
          HIDE: itab-contrato, itab-doc, itab-gjahr, itab-bukrs.
          ELSE.
          WRITE:/80(10) itab-doc.
          HIDE: itab-doc, itab-gjahr, itab-bukrs.
          ENDIF.

          ENDLOOP.

          *************************************
          *CUANDO EL USUARIO HAGA DOBLE-CLICK SOBRE UN CONTRATO
          *O UN DOCUMENTO
          *************************************
          AT LINE-SELECTION.
          PERFORM call_transaction.





          *-----------------------------------------
          **RUTINAS
          *-----------------------------------------


          *&---------------------------------------------------------------------*
          *& Form CABECERA
          *&---------------------------------------------------------------------*
          FORM cabecera.
          WRITE:/(10) 'CONTRATO',
          15(12) 'COD. CLIENTE',
          30(35) 'CLIENTE',
          80(15) 'DOC. CONTABLE'.
          ULINE.

          ENDFORM. " CABECERA

          *&---------------------------------------------------------------------*
          *& Form CALL_TRANSACTION
          *&---------------------------------------------------------------------*
          *Cuando el usuario haga doble click sobre un contrato irá a la
          *transacción FBD3 (Visualizar documento contable).
          *Si es sobre un documento contable irá a la FB03 (Visualizar documento)
          *----------------------------------------------------------------------*
          FORM call_transaction.

          REFRESH bdc_tab.
          CHECK sy-curow >= 3.
          IF sy-cucol <= 10.
          PERFORM dynpro USING:
          'X' 'SAPMF05L' '0100', "Pantalla
          ' ' 'RF05L-BELNR' itab-contrato, "campo contrato
          ' ' 'RF05L-BUKRS' itab-bukrs, "campo sociedad
          ' ' 'RF05L-GJAHR' itab-gjahr. "campo ejercicio
          * ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
          CALL TRANSACTION 'FBD3' USING bdc_tab.
          ELSEIF sy-cucol >= 80.
          PERFORM dynpro USING:
          'X' 'SAPMF05L' '0100', "Pantalla
          ' ' 'RF05L-BELNR' itab-doc, "campo contrato
          ' ' 'RF05L-BUKRS' itab-bukrs, "campo sociedad
          ' ' 'RF05L-GJAHR' itab-gjahr. "campo ejercicio
          * ' ' 'BDC_OKCODE' '/00'. "Pulsar INTRO
          CALL TRANSACTION 'FB03' USING bdc_tab.
          ENDIF.


          ENDFORM. " CALL_TRANSACTION

          *---------------------------------------------------------------------*
          * FORM DYNPRO *
          *---------------------------------------------------------------------*
          * --> VALUE(DYNBEGIN) *
          * --> VALUE(NAME) *
          * --> VALUE(VALUE) *
          *---------------------------------------------------------------------*
          FORM dynpro USING value(dynbegin) value(name) value(value).

          CLEAR bdc_tab.
          IF dynbegin = 'X'.
          bdc_tab-program = name.
          bdc_tab-dynpro = value.
          bdc_tab-dynbegin = 'X'.
          ELSE.
          bdc_tab-fnam = name.
          bdc_tab-fval = value.
          ENDIF.
          APPEND bdc_tab.

          ENDFORM. " DYNPRO

          Saludos!!!!
          Un Huevon No Inútil


          Solo di lo que piensas, a la mejor tienes la mejor respuesta....

          Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

          Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

          Consultor FI jr/ABAP Sr.

          Comentario

          • mysmb2
            Senior Member
            • ene
            • 406

            #6
            Originalmente publicado por juanmgdelomana
            Es una buena idea, pero creo que no se trata de eso... He estado debueando el programa y ni siquiera llega al evento at line selection. Muchas gracias por tu colaboración. Seguire peleando con ello.
            comenta esta parte y probalo.
            set PF-STATUS 'ZSTATUSTRAZABILIDAD'.
            Sebastián Chiavia
            http://www.programacionabap.com.ar

            Comentario

            • juanmgdelomana
              Member
              • dic
              • 47

              #7
              Muchisísisisisismas gracias mysmb2!!!

              Tenías razón, he comentado mi status y ya pasa por esa parte del código y funciona!!! No entiendo muy bien cual es la razón pero... que más da no???
              Jejejeje. No, en serio, me gustaría saber porque pasa esto porque el status lo necesito para hacer otras cosas...

              Muchísimas gracias a los dos por vuestra atención y colaboración!!!

              Comentario

              • DavidXD_XD
                Moderator
                • ago
                • 1255

                #8
                Hola, el problema de tu codigo es el PF STATUS, comentale esa sentencia y vas a ver que entrara la AT line-selection ... espero te sirva
                David Carballido Córdova

                Comentario

                • DavidXD_XD
                  Moderator
                  • ago
                  • 1255

                  #9
                  hola de nuevo, mysmb2 tiene la razon , no vi los post q respondieron mientras probaba el codigo .... un saludo
                  David Carballido Córdova

                  Comentario

                  • juanmgdelomana
                    Member
                    • dic
                    • 47

                    #10
                    Gracias a ti tb DAVID_XD_XD, alguno me podríais explicar cual es la razón por la que no funciona con mi status???

                    No lo logro entender... Y es que necesito tener un status propio ya que necesito crear un botón que me haga otras cosas.

                    Saludos!!!

                    Comentario

                    • robert_milan
                      Senior Member
                      • jun
                      • 315

                      #11
                      Lo que necesitas ahora es el evento AT USER-COMMAND.

                      el codigo del hotspot es el &IC1

                      y solo despues debes teenr una variable aux = sy-curow - 2.

                      read table it_trazbi_sem index aux.

                      debido a que por defaul la primera linea se imprime en la linea 3

                      despues mandar este codigo:

                      SET PARAMETER ID 'QLS' FIELD it_trazbi_sem-prueflos.
                      call TRANSACTION 'QA13' and SKIP FIRST SCREEN.

                      y listo

                      espero te sirva

                      saludos!!!
                      Editado por última vez por robert_milan; 26/03/2008, 15:31:39.
                      Un Huevon No Inútil


                      Solo di lo que piensas, a la mejor tienes la mejor respuesta....

                      Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

                      Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

                      Consultor FI jr/ABAP Sr.

                      Comentario

                      • juanmgdelomana
                        Member
                        • dic
                        • 47

                        #12
                        Un código al hotspot???

                        Comentario

                        • robert_milan
                          Senior Member
                          • jun
                          • 315

                          #13
                          cuando introduces un Status Z, el hot spot se le asigna automaticamente el codigo &IC1.

                          Saludos!!!
                          Un Huevon No Inútil


                          Solo di lo que piensas, a la mejor tienes la mejor respuesta....

                          Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

                          Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

                          Consultor FI jr/ABAP Sr.

                          Comentario

                          • juanmgdelomana
                            Member
                            • dic
                            • 47

                            #14
                            No entiendo lo que quieres decir cuando dices que le he de asociar ese código al hotspot... Estoy un poco perdido con eso... He de tocar algo en mi status Z o tocar el código del programa?

                            Muchas gracias

                            Comentario

                            • robert_milan
                              Senior Member
                              • jun
                              • 315

                              #15
                              en tu funcion

                              form write.

                              loop at it_trazbi_sem.
                              write: /, at 10 it_trazbi_sem-charg,
                              at 30 it_trazbi_sem-prueflos HOTSPOT.
                              hide it_trazbi_sem-prueflos.
                              endloop.
                              clear it_trazbi_sem.

                              endform.

                              Lo que puse en rojo, es el texto en Hotspot. por lo tanto cuando tu le pones el status Z ese campo se le asigna automaticamente el codigo &IC1.

                              entonces en el AT user-command.

                              debes poner algo asi:

                              case sy-ucomm.
                              when '&IC1'.
                              "Codigo X"
                              encase.

                              con esto ya tienes la funcionalidad del clic.

                              espero te quede mas claro.
                              Un Huevon No Inútil


                              Solo di lo que piensas, a la mejor tienes la mejor respuesta....

                              Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

                              Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

                              Consultor FI jr/ABAP Sr.

                              Comentario

                              Trabajando...