f2code

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jlayana
    Junior Member
    • ene
    • 3

    #1

    f2code

    Hola a todos, alguien me puede dar una idea un enlace de lectura, en donde se indique como se implementa el doble click o f2 en un lista, de tal forma que pueda abrir otra pantalla y mostrar mas información.

    Gracias por su ayuda !

    Javier
  • Claudia Valdespino
    Member
    • mar
    • 54

    #2
    Hola Jlayana, lo que tienes que hacer para implementar el doble click en una lista es usar un USER_COMMAND como evento y ahi preguntar por el valor &IC1 que corresponde al doble click. Ahi capturas los datos del registro seleccionado y luego puedes hacer un CALL TRANSACTION pasando esos valores con SET PARAMETER ID.

    Te mando un ejemplito para que te guies. El código que requieres está en el form init_event y en el form user_command


    report zap_facturascompensadas message-id sabapdocu.

    tables: bsak, lfa1, bkpf, zmcai, zcain.

    * PARAMETROS DE SELECCION
    selection-screen begin of block b1 with frame.
    select-options:
    bukrs for bsak-bukrs, "Sociedad
    gjahr for bsak-gjahr, "Ejercicio
    lifnr for bsak-lifnr, "Código proveedor
    belnr for bsak-belnr default '5000000000' to '5099999999', "Nro doc
    augbl for bsak-augbl, "Número de documento de compensación
    augdt for bsak-augdt. "Fecha de compensación
    selection-screen end of block b1.

    * ALV
    type-pools: slis.
    data: gt_fieldcat type slis_t_fieldcat_alv with header line,
    gs_layout type slis_layout_alv,
    g_repid like sy-repid,
    gt_events type slis_t_event.

    * TABLA INTERNA DE FACTURAS COMPENSADAS PARA EL CATALOGO DE DATOS
    data: begin of t_faccom occurs 0,
    bukrs like bsak-bukrs, "Sociedad
    belnr like bsak-belnr, "Documento SAP
    gjahr like bsak-gjahr, "Ejercicio
    budat like bsak-budat, "Fecha de contabilización
    lifnr like bsak-lifnr, "Código proveedor
    name1 like lfa1-name1, "Nombre proveedor
    waers like bsak-waers, "Moneda
    wrbtr like bsak-wrbtr, "Importe moneda original
    dmbtr like bsak-dmbtr, "Importe moneda local
    augbl like bsak-augbl, "Documento de compensación
    augdt like bsak-augdt, "Fecha de compensación
    blart like bsak-blart, "Tipo de documento
    ncarin like zmcai-ncarin, "Carta de Instrucción
    fechbco like zcain-fechbco, "Fecha actualizac.est.cheques
    chect like zchek-chect, "Nº de cheque
    zaldt like payr-zaldt, "Fecha de pago prevista
    shkzg like bsak-shkzg, "Indicador debe/haber
    end of t_faccom.

    * TABLA INTERNA PARA LOS CODIGOS DE PROVEEDOR
    data: begin of t_lifnr occurs 0,
    lifnr like bsak-lifnr, "Código proveedor
    end of t_lifnr.

    * TABLA INTERNA PARA LOS NOMBRES DE PROVEEDORES
    data: begin of t_lfa1 occurs 0,
    lifnr like bsak-lifnr, "Código proveedor
    name1 like lfa1-name1, "Nombre proveedor
    end of t_lfa1.

    * TABLA INTERNA PARA LOS DOCUMENTOS ANULADOS
    data: begin of t_bkpf occurs 0,
    bukrs like bsak-bukrs, "Sociedad
    belnr like bsak-belnr, "Documento SAP
    gjahr like bsak-gjahr, "Ejercicio
    stblg like bkpf-stblg, "Número del doc. de anulación
    stjah like bkpf-stjah, "Ejercicio del doc. de anulación
    end of t_bkpf.

    * TABLA PARA OBTENER LA INFORMACIÓN DEL CHEQUE
    data t_payr like payr.

    * INICIO
    start-of-selection.
    g_repid = sy-repid.
    perform selec_facturas_compensadas.
    perform init_fieldcat.
    perform init_layout.
    perform init_event.
    perform report.


    *&---------------------------------------------------------------------*
    *& Form SELEC_FACTURAS_COMPENSADAS
    *&---------------------------------------------------------------------*
    form selec_facturas_compensadas .
    refresh t_faccom.

    * LLENA LA TABLA T_FACCOM CON DATOS DE FACTURAS COMPENSADAS DE LA BSAK
    select * into corresponding fields of table t_faccom
    from bsak where bukrs in bukrs and
    gjahr in gjahr and
    lifnr in lifnr and
    belnr in belnr and
    augbl in augbl and
    augdt in augdt.

    if sy-subrc <> 0.
    message s888 with 'NO SE ENCONTRARON REGISTROS'.
    stop.
    endif.

    sort t_faccom by bukrs belnr gjahr.

    * CARGA SOLO LOS PROVEEDORES SIN REPETIRSE
    loop at t_faccom.
    t_lifnr-lifnr = t_faccom-lifnr.
    collect t_lifnr.
    clear t_faccom.
    endloop.

    * LLENA LA TABLA T_LFA1 CON LOS NOMBRES DE LOS PROVEEDORES
    * SEGUN LOS CODIGOS DE LA T_LIFNR
    select lifnr name1
    from lfa1
    into corresponding fields of table
    t_lfa1 for all entries in t_lifnr
    where lifnr = t_lifnr-lifnr.

    sort t_lfa1 by lifnr.

    * LLENA LA TABLA T_BKPF SEGUN LOS REGISTROS DE LA TABLA T_FACCOM
    select bukrs belnr gjahr stblg stjah
    from bkpf
    into corresponding fields of table
    t_bkpf for all entries in t_faccom
    where bukrs = t_faccom-bukrs and
    belnr = t_faccom-belnr and
    gjahr = t_faccom-gjahr and
    stblg <> ''.

    sort t_bkpf by bukrs belnr gjahr.

    * RECORRE LA TABLA T_BKPF Y ELIMINA DE LA TABLA T_FACCOM LOS DOCUMENTOS
    * ANULADOS
    loop at t_bkpf.
    delete t_faccom where bukrs = t_bkpf-bukrs and
    belnr = t_bkpf-belnr and
    gjahr = t_bkpf-gjahr.
    endloop.

    perform carga_facturas_compensadas.
    endform. " SELEC_FACTURAS_COMPENSADAS


    *&---------------------------------------------------------------------*
    *& Form CARGA_FACTURAS_COMPENSADAS
    *&---------------------------------------------------------------------*
    form carga_facturas_compensadas .
    loop at t_faccom.
    * OBTIENE EL NOMBRE DEL PROVEEDOR
    read table t_lfa1 with key lifnr = t_faccom-lifnr binary search.
    t_faccom-name1 = t_lfa1-name1.

    * OBTIENE EL SIGNO DEL CAMPO
    if t_faccom-shkzg = 'S'.
    t_faccom-wrbtr = - t_faccom-wrbtr.
    t_faccom-dmbtr = - t_faccom-dmbtr.
    endif.

    * OBTIENE LA CARTA DE INSTRUCCIÓN
    clear: zmcai.
    zmcai-gjahr = t_faccom-augdt(4). "Ejercicio doc. compensación
    select single ncarin into t_faccom-ncarin
    from zmcai
    where zbukr = t_faccom-bukrs and
    gjahr = zmcai-gjahr and
    vblnr = t_faccom-augbl.

    * OBTIENE LA CLASE DEL DOCUMENTO DE COMPENSACIÓN
    select single blart into t_faccom-blart
    from bsak
    where bukrs = t_faccom-bukrs and
    augdt = t_faccom-augdt and
    belnr = t_faccom-augbl.

    * OBTIENE LA FECHA DE ACTUALIZACIÓN DE ESTADOS DE CHEQUES
    clear: zcain.
    zcain-gjahr = t_faccom-augdt(4). "Ejercicio doc. compensación
    select single fechbco into t_faccom-fechbco
    from zcain
    where zbukr = t_faccom-bukrs and
    gjahr = zcain-gjahr and
    ncarin = t_faccom-ncarin.

    * OBTIENE EL NÚMERO DE CHEQUE Y LA FECHA DE PAGO PREVISTA
    call function 'GET_CHECK_INFORMATION'
    exporting
    i_augbl = t_faccom-augbl
    i_augdt = t_faccom-augdt
    i_belnr = t_faccom-augbl
    i_bukrs = t_faccom-bukrs
    i_gjahr = t_faccom-gjahr
    i_call = ''
    importing
    e_payr = t_payr
    exceptions
    not_found = 1
    others = 2.

    if sy-subrc = 0.
    t_faccom-chect = t_payr-chect.
    t_faccom-zaldt = t_payr-zaldt.
    endif.

    modify t_faccom.
    endloop.
    endform. " CARGA_FACTURAS_COMPENSADAS


    *&---------------------------------------------------------------------*
    *& Form INIT_FIELDCAT
    *&---------------------------------------------------------------------*
    form init_fieldcat .
    clear gt_fieldcat.
    refresh gt_fieldcat.

    gt_fieldcat-fieldname = 'BUKRS'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Sociedad'.
    gt_fieldcat-outputlen = '9'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'BELNR'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Documento'.
    gt_fieldcat-outputlen = '11'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'BUDAT'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Fe.Contab.'.
    gt_fieldcat-outputlen = '11'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'LIFNR'.
    gt_fieldcat-ref_tabname = 'BSIK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Proveedor'.
    gt_fieldcat-outputlen = '11'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'NAME1'.
    gt_fieldcat-ref_tabname = 'LFA1'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Descripción'.
    gt_fieldcat-outputlen = '40'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'WAERS'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Moneda'.
    gt_fieldcat-outputlen = '7'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'WRBTR'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Importe MO'.
    gt_fieldcat-outputlen = '11'.
    gt_fieldcat-cfieldname = 'WAERS'.
    gt_fieldcat-ctabname = 'T_FACCOM'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'DMBTR'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Importe ML'.
    gt_fieldcat-outputlen = '11'.
    gt_fieldcat-cfieldname = 'WAERS'.
    gt_fieldcat-ctabname = 'T_FACCOM'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'AUGBL'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Doc.compensa'.
    gt_fieldcat-outputlen = '13'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'AUGDT'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Fec.compensa'.
    gt_fieldcat-outputlen = '13'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'BLART'.
    gt_fieldcat-ref_tabname = 'BSAK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Clase'.
    gt_fieldcat-outputlen = '6'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'NCARIN'.
    gt_fieldcat-ref_tabname = 'ZMCAI'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Carta Instruc'.
    gt_fieldcat-outputlen = '14'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'FECHBCO'.
    gt_fieldcat-ref_tabname = 'ZCAIN'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Fecha de envío'.
    gt_fieldcat-outputlen = '15'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'CHECT'.
    gt_fieldcat-ref_tabname = 'ZCHEK'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Cheque'.
    gt_fieldcat-outputlen = '9'.
    append gt_fieldcat.
    clear: gt_fieldcat.

    gt_fieldcat-fieldname = 'ZALDT'.
    gt_fieldcat-ref_tabname = 'PAYR'.
    gt_fieldcat-tabname = 'T_FACCOM'.
    gt_fieldcat-seltext_l = 'Fec.pago prevista'.
    gt_fieldcat-outputlen = '18'.
    append gt_fieldcat.
    clear: gt_fieldcat.
    endform. " INIT_FIELDCAT


    *&---------------------------------------------------------------------*
    *& Form INIT_LAYOUT
    *&---------------------------------------------------------------------*
    form init_layout .
    gs_layout-zebra = 'X'.
    endform. " INIT_LAYOUT


    *&---------------------------------------------------------------------*
    *& Form INIT_EVENT
    *&---------------------------------------------------------------------*
    form init_event .
    data: c_formname_top_of_page type slis_formname value 'TOP_PAGE',
    event type slis_alv_event.

    event-name = slis_ev_top_of_page.
    event-form = 'TOP_PAGE'.
    append event to gt_events.

    event-name = slis_ev_user_command.
    event-form = 'USER_COMMAND'.
    append event to gt_events.
    endform. " INIT_EVENT


    *&---------------------------------------------------------------------*
    *& Form TOP_PAGE
    *&---------------------------------------------------------------------*
    form top_page.
    write:/ sy-repid, 197(8) text-001, 207(10) sy-datum. "Fecha
    write:/ sy-uname, 197(8) text-002, 207(8) sy-uzeit. "Hora
    write:/100(21) text-004, 197(8) text-003, 207(1) sy-pagno. "Pagina
    skip 1.
    endform. "TOP_PAGE


    *&---------------------------------------------------------------------*
    *& Form USER_COMMAND
    *&---------------------------------------------------------------------*
    form user_command using r_ucomm like sy-ucomm
    rs_selfield type slis_selfield.
    case r_ucomm.
    when '&IC1'. "Doble Click
    * Se lee la entrada seleccionada de la tabla T_FACCOM
    read table t_faccom index rs_selfield-tabindex.
    if sy-subrc = 0.
    if rs_selfield-fieldname = 'BELNR'. "Documento SAP
    set parameter id 'BLN' field t_faccom-belnr.
    elseif rs_selfield-fieldname = 'AUGBL'. "Documento compensación
    set parameter id 'BLN' field t_faccom-augbl.
    endif.
    set parameter id 'BUK' field t_faccom-bukrs.
    set parameter id 'GJR' field t_faccom-gjahr.
    call transaction 'FB03' and skip first screen.
    endif.
    endcase.
    endform. "USER_COMMAND


    *&---------------------------------------------------------------------*
    *& Form REPORT
    *&---------------------------------------------------------------------*
    form report .
    * CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    call function 'REUSE_ALV_LIST_DISPLAY'
    exporting
    i_callback_program = g_repid
    is_layout = gs_layout
    it_fieldcat = gt_fieldcat[]
    it_events = gt_events
    tables
    t_outtab = t_faccom
    exceptions
    program_error = 1
    others = 2.
    endform. " REPORT
    Saludos,

    Claudia V.

    Comentario

    • FBAENA
      Junior Member
      • may
      • 9

      #3
      hola, me ha parecido muy interesante tu report,,,

      lo he querido probar y me da error en las tablas zcain y zmcai

      como lo puedo solucionar?

      Comentario

      • BY_MY
        Senior Member
        • nov
        • 130

        #4
        hola.

        Al ser tablas Z supongo que en tu sistema no existiran con lo que o te las tendras que crear o tendras que dejar de usarlas en el REPORT.



        un saludo.

        Comentario

        • Claudia Valdespino
          Member
          • mar
          • 54

          #5
          Efectivamente, esas tablas no existen en tu sistema. Lo que puedes hacer es probar un reporte con tablas estandar... y darle doble click para que te llame a un detalle.
          Saludos,

          Claudia V.

          Comentario

          Trabajando...