Declaración y uso FIELD – SYMBOLS.


 

FIELD-SYMBOLS

FIELD-SYMBOLS

 

Generar un fichero externo. Programa ejemplo ZA3SOC.


 
report  za3soc.

************************************************************************
***********                     TIPOS                        ***********
************************************************************************

type-pools: slis.

************************************************************************
***********                   TABLAS                         ***********
************************************************************************
tables: ska1, t001.

data: it_saldos like table of bapi1028_4 with header line.
data: it_saldos_ant like table of bapi1028_4 with header line.
data: it_saldos_ante like table of bapi1028_4 with header line.

data: begin of it_ctas occurs 0,
            saknr like bapi1028_0-gl_account.
data: end of it_ctas.

data: begin of it_datos occurs 0,

  d_paval type paval,
  saknr like bapi1028_0-gl_account,
  sdo_ini like bapi1028_4-balance,
  sdo_fin like bapi1028_4-balance,
  debe like bapi1028_4-debits_per,
  haber like bapi1028_4-credit_per,
  anyo like bapi1028_4-fisc_year.

data: end of it_datos.

data: begin of it_datos_ant occurs 0,

  d_paval type paval,
  saknr like bapi1028_0-gl_account,
  sdo_ini like bapi1028_4-balance,
  sdo_fin like bapi1028_4-balance,
  debe like bapi1028_4-debits_per,
  haber like bapi1028_4-credit_per,
  anyo like bapi1028_4-fisc_year.

data: end of it_datos_ant.

data: begin of it_aux occurs 0,

          d_paval(10)     type c,
          saknr(4)        type c,
          sdo_ini(12)     type c,
          sdo_fin(12)     type c,
          debe(12)        type c,
          haber(12)       type c,
          anyo(4)         type c.

data: end of it_aux.

************************************************************************
***********                   CLASES                         ***********
************************************************************************
class lcl_application definition.

  public section.
    methods handle_double_click2
    for event double_click of cl_gui_alv_grid
    importing e_row e_column es_row_no.

endclass.                    “lcl_application2 DEFINITION
*———————————————————————-*
*       CLASS lcl_application2 IMPLEMENTATION
*———————————————————————-*
*
*———————————————————————-*
class lcl_application implementation.
  method handle_double_click2.

  endmethod.                    “handle_double_click

endclass.                    “lcl_application2 IMPLEMENTATION

************************************************************************
***********                 VARIABLES                        ***********
************************************************************************
data: s_anyo_ant like bapi1028_4-fisc_year,
      s_anyo_ante like bapi1028_4-fisc_year,
      d_paval like t001z-paval,
      g_aplicacion type ref to lcl_application,
      g_custom_contenedor1 type ref to cl_gui_custom_container,
      g_splitter1 type ref to cl_gui_splitter_container,
      g_container_1 type ref to cl_gui_container,
      g_grid1 type ref to cl_gui_alv_grid,
      is_variant type disvariant,
      custom_container type ref to cl_gui_custom_container,
      fichero type string.
data: aux(66).
data: ok_code                        like sy-ucomm,
      old_okcode                     like sy-ucomm,
      save_ok                        like sy-ucomm,
      g_repid like sy-repid.

data: init(1),
      x_save type char01 value ‘A’.

data wa_datos like line of it_datos.
data wa_datos_ant like line of it_datos.
data wa_aux like line of it_aux.
data wa_anterior like line of it_datos.
data wa_anterior_ant like line of it_datos.

data: ls_fieldcat like lvc_s_fcat occurs 0  with header line,
      ls_layout type lvc_s_layo.

*Primer Bloque: Datos de Selección
selection-screen begin of block seleccion with frame title text-001.
parameters:
  s_plan like ska1-ktopl obligatory,
  s_soc like bapi1028_0-comp_code obligatory,
  s_anyo like bapi1028_4-fisc_year obligatory.

selection-screen end of block seleccion.

*Segundo Bloque: Datos de Fichero
selection-screen begin of block ruta with frame title text-009.
parameters:
  s_ruta(100) type c obligatory,
  s_archi(50) type c obligatory.

selection-screen end of block ruta.

start-of-selection.

  call screen ’0100′.

*&———————————————————————*
*&      Form  OBTENER_DATOS
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form obtener_datos.

  data anterior like sy-tabix.

  clear it_datos.

  select * into corresponding fields of table it_ctas
       from ska1 as a inner join skb1 as b
         on ( a~mandt = b~mandt
         and a~saknr = b~saknr ) client specified
       where a~ktopl = s_plan
         and b~bukrs = s_soc.

  sort it_ctas.
  delete adjacent duplicates from it_ctas.

  loop at it_ctas.
*    IF it_ctas-saknr = ’0057288888′ OR it_ctas-saknr = ’0079300000′ OR it_ctas-saknr = ’0079300001′.

*    ENDIF.

    s_anyo_ant = s_anyo - 1.
    s_anyo_ante = s_anyo_ant - 1.

    call function ‘BAPI_GL_GETGLACCPERIODBALANCES’
      exporting
        companycode      = s_soc
        glacct           = it_ctas-saknr
        fiscalyear       = s_anyo
        currencytype     = ’10′ “Moneda de la sociedad
      tables
        account_balances = it_saldos.

*    IF it_saldos[] IS NOT INITIAL.

    loop at it_saldos.

      wa_datos-debe = wa_datos-debe + it_saldos-debits_per.
      wa_datos-haber = wa_datos-haber + it_saldos-credit_per.

      if it_saldos-fis_period = ’16′.
        wa_datos-sdo_fin = it_saldos-balance.
      endif.

    endloop.

    call function ‘BAPI_GL_GETGLACCPERIODBALANCES’
      exporting
        companycode      = s_soc
        glacct           = it_ctas-saknr
        fiscalyear       = s_anyo_ant
        currencytype     = ’10′ “Moneda de la sociedad
      tables
        account_balances = it_saldos_ant.

*    IF it_saldos_ant[] IS NOT INITIAL.
      read table it_saldos_ant with key fis_period = ’16′.
      if sy-subrc = 0.
        wa_datos-sdo_ini = it_saldos_ant-balance.
      endif.

** nif sdad, num cuenta y ejercicio para it_datos.
      select single paval into d_paval from t001z
                    where bukrs = s_soc and party = ‘SAP001′.

      wa_datos-d_paval = d_paval.
      wa_datos-saknr = it_ctas-saknr+2(4).
      wa_datos-anyo = s_anyo.

*        APPEND wa_datos TO it_datos.
*    ELSE.
*      wa_datos-sdo_ini = ’0′.
*      SELECT SINGLE paval INTO d_paval FROM t001z
*                 WHERE bukrs = s_soc AND party = ‘SAP001′.
*
*      wa_datos-d_paval = d_paval.
*      wa_datos-saknr = it_ctas-saknr+2(4).
*      wa_datos-anyo = s_anyo.
*
**        APPEND wa_datos TO it_datos.
*    ENDIF.
*    ENDIF.
*      CLEAR wa_datos.

    loop at it_saldos_ant.

      wa_datos_ant-debe = wa_datos_ant-debe + it_saldos_ant-debits_per.
      wa_datos_ant-haber = wa_datos_ant-haber + it_saldos_ant-credit_per.

      if it_saldos_ant-fis_period = ’16′.
        wa_datos_ant-sdo_fin = it_saldos_ant-balance.
      endif.

    endloop.

    call function ‘BAPI_GL_GETGLACCPERIODBALANCES’
      exporting
        companycode      = s_soc
        glacct           = it_ctas-saknr
        fiscalyear       = s_anyo_ante
        currencytype     = ’10′ “Moneda de la sociedad
      tables
        account_balances = it_saldos_ante.

*    IF it_saldos_ante[] IS NOT INITIAL.
      read table it_saldos_ante with key fis_period = ’16′.
      if sy-subrc = 0.
        wa_datos_ant-sdo_ini = it_saldos_ante-balance.
      endif.

** nif sdad, num cuenta y ejercicio para it_datos.
      select single paval into d_paval from t001z
                    where bukrs = s_soc and party = ‘SAP001′.

      wa_datos_ant-d_paval = d_paval.
      wa_datos_ant-saknr = it_ctas-saknr+2(4).
      wa_datos_ant-anyo = s_anyo_ant.

*        APPEND wa_datos_ant TO it_datos_ant.

*    ELSE.
*      wa_datos_ant-sdo_ini = ’0′.
*      SELECT SINGLE paval INTO d_paval FROM t001z
*                 WHERE bukrs = s_soc AND party = ‘SAP001′.
*
*      wa_datos_ant-d_paval = d_paval.
*      wa_datos_ant-saknr = it_ctas-saknr+2(4).
*      wa_datos_ant-anyo = s_anyo_ant.
*
**        APPEND wa_datos_ant TO it_datos_ant.
*    ENDIF.

    if wa_datos_ant-debe = ’0′ and wa_datos_ant-haber = ’0′ and wa_datos_ant-sdo_fin = ’0′
        AND wa_datos_ant-sdo_ini = ’0′ AND wa_datos-debe = ’0′ AND wa_datos-haber = ’0′
        and wa_datos-sdo_fin = ’0′ and wa_datos-sdo_ini = ’0′.
      continue.
    else.

      append wa_datos to it_datos.
      append wa_datos_ant to it_datos_ant.
    endif.
    clear wa_datos_ant.
    clear wa_datos.
*    ENDIF.

  endloop.

  clear it_datos.
  clear it_datos_ant.

************ OBTENEMOS SALDOS POR CUENTA ******************************
  read table it_datos index 1 into wa_anterior.

  loop at it_datos.

    if it_datos-saknr = wa_anterior-saknr.

      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos-sdo_ini * 100 ).
      perform signo_delante changing wa_aux-sdo_ini.

      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos-sdo_fin * 100 ).
      perform signo_delante changing wa_aux-sdo_fin.

      wa_aux-debe = wa_aux-debe + ( it_datos-debe * 100 ).
      perform signo_delante changing wa_aux-debe.

      wa_aux-haber = wa_aux-haber + ( it_datos-haber * 100 ).
      perform signo_delante changing wa_aux-haber.

      if wa_aux-d_paval is initial.
        wa_aux-d_paval = it_datos-d_paval.
        shift wa_aux-d_paval right deleting trailing space.
        wa_aux-saknr = it_datos-saknr.
        shift wa_aux-saknr right deleting trailing space.
        wa_aux-anyo = it_datos-anyo.
        shift wa_aux-anyo right deleting trailing space.
      endif.
    else.

      append wa_aux to it_aux.
      clear wa_aux.

      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos-sdo_ini * 100 ).
      perform signo_delante changing wa_aux-sdo_ini.

      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos-sdo_fin * 100 ).
      perform signo_delante changing wa_aux-sdo_fin.

      wa_aux-debe = wa_aux-debe + ( it_datos-debe * 100 ).
      perform signo_delante changing wa_aux-debe.

      wa_aux-haber = wa_aux-haber + ( it_datos-haber * 100 ).
      perform signo_delante changing wa_aux-haber.

      if wa_aux-d_paval is initial.
        wa_aux-d_paval = it_datos-d_paval.
        shift wa_aux-d_paval right deleting trailing space.
        wa_aux-saknr = it_datos-saknr.
        shift wa_aux-saknr right deleting trailing space.
        wa_aux-anyo = it_datos-anyo.
        shift wa_aux-anyo right deleting trailing space.
      endif.

    endif.

    wa_anterior = it_datos.

  endloop.
************************************

  append wa_aux to it_aux.

******28.07.2011*******************************************************
  clear wa_aux.
  clear wa_anterior.
  read table it_datos_ant index 1 into wa_anterior.

  loop at it_datos_ant.

    read table it_aux with key saknr = it_datos_ant-saknr.
    if sy-subrc = 0.

      if it_datos_ant-saknr = wa_anterior-saknr.

        wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos_ant-sdo_ini * 100 ).
        perform signo_delante changing wa_aux-sdo_ini.

        wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos_ant-sdo_fin * 100 ).
        perform signo_delante changing wa_aux-sdo_fin.

        wa_aux-debe = wa_aux-debe + ( it_datos_ant-debe * 100 ).
        perform signo_delante changing wa_aux-debe.

        wa_aux-haber = wa_aux-haber + ( it_datos_ant-haber * 100 ).
        perform signo_delante changing wa_aux-haber.

        if wa_aux-d_paval is initial.
          wa_aux-d_paval = it_datos_ant-d_paval.
          shift wa_aux-d_paval right deleting trailing space.
          wa_aux-saknr = it_datos_ant-saknr.
          shift wa_aux-saknr right deleting trailing space.
          wa_aux-anyo = it_datos_ant-anyo.
          shift wa_aux-anyo right deleting trailing space.
        endif.
      else.

        append wa_aux to it_aux.
        clear wa_aux.

        wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos_ant-sdo_ini * 100 ).
        perform signo_delante changing wa_aux-sdo_ini.

        wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos_ant-sdo_fin * 100 ).
        perform signo_delante changing wa_aux-sdo_fin.

        wa_aux-debe = wa_aux-debe + ( it_datos_ant-debe * 100 ).
        perform signo_delante changing wa_aux-debe.

        wa_aux-haber = wa_aux-haber + ( it_datos_ant-haber * 100 ).
        perform signo_delante changing wa_aux-haber.

        if wa_aux-d_paval is initial.
          wa_aux-d_paval = it_datos_ant-d_paval.
          shift wa_aux-d_paval right deleting trailing space.
          wa_aux-saknr = it_datos_ant-saknr.
          shift wa_aux-saknr right deleting trailing space.
          wa_aux-anyo = it_datos_ant-anyo.
          shift wa_aux-anyo right deleting trailing space.
        endif.

      endif.

      wa_anterior = it_datos_ant.
    else.
      continue.
    endif.
  endloop.
************************************************

  append wa_aux to it_aux.
  clear wa_aux.

*******************************************
  sort it_aux by saknr anyo.
****28.07.2011**************************************************************
**para quitar espacios entre campos de la tabla de salida.

  loop at it_aux.
    concatenate it_aux-d_paval it_aux-saknr it_aux-sdo_ini
                it_aux-sdo_fin it_aux-debe it_aux-haber it_aux-anyo
                into aux.

  endloop.
endform.                    ” OBTENER_DATOS
*&———————————————————————*
*&      Form  CREAR_FIELDCAT
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form crear_fieldcat .

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘D_PAVAL’.
  ls_fieldcat-reptext   = text-008.
  ls_fieldcat-scrtext_l = text-008.
  ls_fieldcat-scrtext_m = text-008.
  ls_fieldcat-scrtext_s = text-008.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘SAKNR’.
  ls_fieldcat-reptext   = text-002.
  ls_fieldcat-scrtext_l = text-002.
  ls_fieldcat-scrtext_m = text-002.
  ls_fieldcat-scrtext_s = text-002.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘SDO_INI’.
  ls_fieldcat-reptext   = text-003.
  ls_fieldcat-scrtext_l = text-003.
  ls_fieldcat-scrtext_m = text-003.
  ls_fieldcat-scrtext_s = text-003.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘SDO_FIN’.
  ls_fieldcat-reptext   = text-004.
  ls_fieldcat-scrtext_l = text-004.
  ls_fieldcat-scrtext_m = text-004.
  ls_fieldcat-scrtext_s = text-004.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘DEBE’.
  ls_fieldcat-reptext   = text-005.
  ls_fieldcat-scrtext_l = text-005.
  ls_fieldcat-scrtext_m = text-005.
  ls_fieldcat-scrtext_s = text-005.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘HABER’.
  ls_fieldcat-reptext   = text-006.
  ls_fieldcat-scrtext_l = text-006.
  ls_fieldcat-scrtext_m = text-006.
  ls_fieldcat-scrtext_s = text-006.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname = ‘ANYO’.
  ls_fieldcat-reptext   = text-007.
  ls_fieldcat-scrtext_l = text-007.
  ls_fieldcat-scrtext_m = text-007.
  ls_fieldcat-scrtext_s = text-007.
  ls_fieldcat-just = ‘RIGHT’.
  append ls_fieldcat.

endform.                    ” CREAR_FIELDCAT
*&———————————————————————*
*&      Form  MOSTRAR_SALIDA
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form mostrar_salida .

  perform crear_fieldcat.
  perform layout using ls_layout.

  is_variant-report    = sy-repid.
  is_variant-handle    = sy-dynnr.

  call method g_grid1->set_table_for_first_display
    exporting
*      i_structure_name     = ‘IT_DATOS1′
      is_layout            = ls_layout
*      it_toolbar_excluding = t_toolbar_excl
      is_variant           = is_variant
      i_save               = x_save
    changing
      it_outtab            = it_aux[]
      it_fieldcatalog      = ls_fieldcat[].

endform.                    ” MOSTRAR_SALIDA
*&———————————————————————*
*&      Form  LAYOUT
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_LS_LAYOUT  text
*———————————————————————-*
form layout  using  p_layout type lvc_s_layo.

  p_layout-grid_title = text-010.
  p_layout-zebra      = ‘X’.
  p_layout-cwidth_opt = ‘X’.

endform.                    ” LAYOUT
*&———————————————————————*
*&      Module  STATUS  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status output.
  set pf-status ’100′.
  set titlebar ’100′.

  if init is initial.
*   Container de la dynpro
    perform obtener_datos.

    create object g_custom_contenedor1
    exporting container_name = ‘CUSTOM_CONTAINER1′.

*   Creamos el splitter con 2 filas y una columna
    create object g_splitter1
    exporting parent = g_custom_contenedor1
      rows    = 1
      columns = 1.

*   Creamos los contenedores  (aqui irá el grid1)
    call method g_splitter1->get_container
      exporting
        row       = 1
        column    = 1
      receiving
        container = g_container_1.

*  Creamos los Grid
    create object g_grid1
    exporting i_parent = g_container_1.

    create object g_aplicacion.
    init = ‘X’.

    perform mostrar_salida.

  else.
    call method g_grid1->refresh_table_display.
  endif.
endmodule.                 ” STATUS  OUTPUT
*&———————————————————————*
*&      Module  USER_COMMAND_0100  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
module user_command_0100 input.
  save_ok = sy-ucomm.

  case save_ok.
    when ‘BACK’.
      set screen 0.
    when ‘CANC’ or ‘EXIT’.
      leave to screen 0.
    when ‘FICHERO’.
      perform crear_fichero tables it_aux.
  endcase.
endmodule.                 ” USER_COMMAND_0100  INPUT
*&———————————————————————*
*&      Form  SIGNO_DELANTE
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_WA_AUX_SDO_INI  text
*———————————————————————-*
form signo_delante changing valor.
  if valor < 0.

    call function ‘CLOI_PUT_SIGN_IN_FRONT’
      changing
        value = valor.
  endif.
  shift valor right deleting trailing space.

endform.                    ” SIGNO_DELANTE
*&———————————————————————*
*&      Form  CREAR_FICHERO
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_AUX  text
*———————————————————————-*
form crear_fichero  tables t_aux structure it_aux.

  concatenate s_ruta ‘\’ s_archi into fichero.
  condense fichero no-gaps.

  call function ‘GUI_DOWNLOAD’
    exporting
*   BIN_FILESIZE                    =
      filename                      = fichero
     filetype                       = ‘BIN’
*   APPEND                          = ‘ ‘
*   WRITE_FIELD_SEPARATOR           = ‘ ‘
*   HEADER                          = ’00′
*   TRUNC_TRAILING_BLANKS           = ‘ ‘
*   WRITE_LF                        = ‘X’
*   COL_SELECT                      = ‘ ‘
*   COL_SELECT_MASK                 = ‘ ‘
*   DAT_MODE                        = ‘ ‘
*   CONFIRM_OVERWRITE               = ‘ ‘
*   NO_AUTH_CHECK                   = ‘ ‘
*   CODEPAGE                        = ‘ ‘
*   IGNORE_CERR                     = ABAP_TRUE
*   REPLACEMENT                     = ‘#’
*   WRITE_BOM                       = ‘ ‘
*   TRUNC_TRAILING_BLANKS_EOL       = ‘X’
*   WK1_N_FORMAT                    = ‘ ‘
*   WK1_N_SIZE                      = ‘ ‘
*   WK1_T_FORMAT                    = ‘ ‘
*   WK1_T_SIZE                      = ‘ ‘
*   WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*   SHOW_TRANSFER_STATUS            = ABAP_TRUE
* IMPORTING
*   FILELENGTH                      =
    tables
      data_tab                        = t_aux
*   FIELDNAMES                      =
   exceptions
     file_write_error                = 1
     no_batch                        = 2
     gui_refuse_filetransfer         = 3
     invalid_type                    = 4
     no_authority                    = 5
     unknown_error                   = 6
     header_not_allowed              = 7
     separator_not_allowed           = 8
     filesize_not_allowed            = 9
     header_too_long                 = 10
     dp_error_create                 = 11
     dp_error_send                   = 12
     dp_error_write                  = 13
     unknown_dp_error                = 14
     access_denied                   = 15
     dp_out_of_memory                = 16
     disk_full                       = 17
     dp_timeout                      = 18
     file_not_found                  = 19
     dataprovider_exception          = 20
     control_flush_error             = 21
     others                          = 22
            .
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

endform.                    ” CREAR_FICHERO
*&———————————————————————*
*&      Form  DATOS_POR_ANYO
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
*FORM datos_anyo_actual USING s_anyo s_anyo_ant CHANGING it_datos.
*
*  s_anyo_ant = s_anyo - 1.
*
*  CALL FUNCTION ‘BAPI_GL_GETGLACCPERIODBALANCES’
*    EXPORTING
*      companycode      = s_soc
*      glacct           = it_ctas-saknr
*      fiscalyear       = s_anyo
*      currencytype     = ’10′ “Moneda de la sociedad
*    TABLES
*      account_balances = it_saldos.
*
*  IF it_saldos[] IS NOT INITIAL.
*
*    LOOP AT it_saldos.
*
*      wa_datos-debe = wa_datos-debe + it_saldos-debits_per.
*      wa_datos-haber = wa_datos-haber + it_saldos-credit_per.
*
*      IF it_saldos-fis_period = ’16′.
*        wa_datos-sdo_fin = it_saldos-balance.
*      ENDIF.
*
*    ENDLOOP.
*
*    CALL FUNCTION ‘BAPI_GL_GETGLACCPERIODBALANCES’
*      EXPORTING
*        companycode      = s_soc
*        glacct           = it_ctas-saknr
*        fiscalyear       = s_anyo_ant
*        currencytype     = ’10′ “Moneda de la sociedad
*      TABLES
*        account_balances = it_saldos_ant.
*
*    IF it_saldos_ant[] IS NOT INITIAL.
*      READ TABLE it_saldos_ant WITH KEY fis_period = ’16′.
*      IF sy-subrc = 0.
*        wa_datos-sdo_ini = it_saldos_ant-balance.
*      ENDIF.
**      ENDIF.
*
*** nif sdad, num cuenta y ejercicio para it_datos.
*      SELECT SINGLE paval INTO d_paval FROM t001z
*                    WHERE bukrs = s_soc AND party = ‘SAP001′.
*
*      wa_datos-d_paval = d_paval.
*      wa_datos-saknr = it_ctas-saknr+2(4).
*      wa_datos-anyo = s_anyo.
*
*      APPEND wa_datos TO it_datos.
*
*    ENDIF.
*  ENDIF.
*  CLEAR wa_datos.
*  CLEAR it_datos.
*
*  READ TABLE it_datos INDEX 1 INTO wa_anterior.
*
*  LOOP AT it_datos.
*
*    IF it_datos-saknr = wa_anterior-saknr.
*
*      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos-sdo_ini * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_ini.
*
*      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos-sdo_fin * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_fin.
*
*      wa_aux-debe = wa_aux-debe + ( it_datos-debe * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-debe.
*
*      wa_aux-haber = wa_aux-haber + ( it_datos-haber * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-haber.
*
*      IF wa_aux-d_paval IS INITIAL.
*        wa_aux-d_paval = it_datos-d_paval.
*        SHIFT wa_aux-d_paval RIGHT DELETING TRAILING space.
*        wa_aux-saknr = it_datos-saknr.
*        SHIFT wa_aux-saknr RIGHT DELETING TRAILING space.
*        wa_aux-anyo = it_datos-anyo.
*        SHIFT wa_aux-anyo RIGHT DELETING TRAILING space.
*      ENDIF.
*    ELSE.
*
*      APPEND wa_aux TO it_aux.
*      CLEAR wa_aux.
*
*      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos-sdo_ini * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_ini.
*
*      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos-sdo_fin * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_fin.
*
*      wa_aux-debe = wa_aux-debe + ( it_datos-debe * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-debe.
*
*      wa_aux-haber = wa_aux-haber + ( it_datos-haber * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-haber.
*
*      IF wa_aux-d_paval IS INITIAL.
*        wa_aux-d_paval = it_datos-d_paval.
*        SHIFT wa_aux-d_paval RIGHT DELETING TRAILING space.
*        wa_aux-saknr = it_datos-saknr.
*        SHIFT wa_aux-saknr RIGHT DELETING TRAILING space.
*        wa_aux-anyo = it_datos-anyo.
*        SHIFT wa_aux-anyo RIGHT DELETING TRAILING space.
*      ENDIF.
*
*    ENDIF.
*
*    wa_anterior = it_datos.
*
*  ENDLOOP.
*ENDFORM.                    ” DATOS_POR_ANYO
**&———————————————————————*
**&      Form  DATOS_ANYO_ANTERIOR
**&———————————————————————*
**       text
**———————————————————————-*
**      –>P_S_ANYO_ANT  text
**      –>P_S_ANYO_ANTE  text
**———————————————————————-*
*FORM datos_anyo_anterior  USING s_anyo_ant s_anyo_ante.
*  s_anyo_ante = s_anyo_ant - 1.
*  LOOP AT it_saldos_ant.
*
*    wa_datos_ant-debe = wa_datos_ant-debe + it_saldos_ant-debits_per.
*    wa_datos_ant-haber = wa_datos_ant-haber + it_saldos_ant-credit_per.
*
*    IF it_saldos_ant-fis_period = ’16′.
*      wa_datos_ant-sdo_fin = it_saldos_ant-balance.
*    ENDIF.
*
*  ENDLOOP.
*
*  CALL FUNCTION ‘BAPI_GL_GETGLACCPERIODBALANCES’
*    EXPORTING
*      companycode      = s_soc
*      glacct           = it_ctas-saknr
*      fiscalyear       = s_anyo_ante
*      currencytype     = ’10′ “Moneda de la sociedad
*    TABLES
*      account_balances = it_saldos_ante.
*
*  IF it_saldos_ante[] IS NOT INITIAL.
*    READ TABLE it_saldos_ante WITH KEY fis_period = ’16′.
*    IF sy-subrc = 0.
*      wa_datos_ant-sdo_ini = it_saldos_ante-balance.
*    ENDIF.
**      ENDIF.
*
*** nif sdad, num cuenta y ejercicio para it_datos.
*    SELECT SINGLE paval INTO d_paval FROM t001z
*                  WHERE bukrs = s_soc AND party = ‘SAP001′.
*
*    wa_datos_ant-d_paval = d_paval.
*    wa_datos_ant-saknr = it_ctas-saknr+2(4).
*    wa_datos_ant-anyo = s_anyo_ant.
*
*    APPEND wa_datos_ant TO it_datos_ant.
*  ENDIF.
**  ENDIF.
*
*  CLEAR wa_datos_ant.
*  CLEAR it_datos_ant.
*
*  READ TABLE it_datos_ant INDEX 1 INTO wa_anterior_ant.
*
*  LOOP AT it_datos_ant.
*
*    IF it_datos_ant-saknr = wa_anterior_ant-saknr.
*
*      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos_ant-sdo_ini * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_ini.
*
*      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos_ant-sdo_fin * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_fin.
*
*      wa_aux-debe = wa_aux-debe + ( it_datos_ant-debe * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-debe.
*
*      wa_aux-haber = wa_aux-haber + ( it_datos_ant-haber * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-haber.
*
*      IF wa_aux-d_paval IS INITIAL.
*        wa_aux-d_paval = it_datos_ant-d_paval.
*        SHIFT wa_aux-d_paval RIGHT DELETING TRAILING space.
*        wa_aux-saknr = it_datos_ant-saknr.
*        SHIFT wa_aux-saknr RIGHT DELETING TRAILING space.
*        wa_aux-anyo = it_datos_ant-anyo.
*        SHIFT wa_aux-anyo RIGHT DELETING TRAILING space.
*      ENDIF.
*    ELSE.
*
*      APPEND wa_aux TO it_aux.
*      CLEAR wa_aux.
*
*      wa_aux-sdo_ini = wa_aux-sdo_ini + ( it_datos_ant-sdo_ini * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_ini.
*
*      wa_aux-sdo_fin = wa_aux-sdo_fin + ( it_datos_ant-sdo_fin * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-sdo_fin.
*
*      wa_aux-debe = wa_aux-debe + ( it_datos_ant-debe * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-debe.
*
*      wa_aux-haber = wa_aux-haber + ( it_datos_ant-haber * 100 ).
*      PERFORM signo_delante CHANGING wa_aux-haber.
*
*      IF wa_aux-d_paval IS INITIAL.
*        wa_aux-d_paval = it_datos_ant-d_paval.
*        SHIFT wa_aux-d_paval RIGHT DELETING TRAILING space.
*        wa_aux-saknr = it_datos_ant-saknr.
*        SHIFT wa_aux-saknr RIGHT DELETING TRAILING space.
*        wa_aux-anyo = it_datos_ant-anyo.
*        SHIFT wa_aux-anyo RIGHT DELETING TRAILING space.
*      ENDIF.
*
*    ENDIF.
*
*    wa_anterior = it_datos_ant.
*
*  ENDLOOP.
*ENDFORM.                    ” DATOS_ANYO_ANTERIOR

Ejemplo Moodul Poole, carga datos.


El siguiente programa de ejemplo , consta de tres pestañas. La primera dá de alta un registro en una tabla ‘Z’ (ZCLIENTES).

La segunda crea registros en la tabla ‘Z’, a través de un batch-input que carga los registro desde un fichero externo.

La tercera pestaña, es un informe que muestra los registros de la tabla ‘Z’.

include ZMCLIENTES_VAR

 *&———————————————————————*
*&  Include           ZMCLIENTES_VAR
*&———————————————————————*

*************************** TABLAS DD **********************************
tables: zclientes.
************************************************************************
type-pools: slis.
*************************** CONSTANTES *********************************
constants: begin of c_tab_clientes,
             newcli like sy-ucomm value ‘NEWCLI’,
             carcli like sy-ucomm value ‘CARCLI’,
             liscli like sy-ucomm value ‘LISCLI’,
           end of c_tab_clientes,
           c_crear(1) value 1,
           c_modificar(1) value 2,
           c_visualizar(1) value 3,
           c_subscr110 like sy-dynnr value ’0110′,
           c_subscr120 like sy-dynnr value ’0120′,
           c_subscr130 like sy-dynnr value ’0130′.
************************************************************************

*************************** TABLAS INTERNAS ****************************
data: begin of it_clientes occurs 0.
        include structure zclientes.
data:  end of it_clientes,
begin of it_fcodes occurs 0,
   fcodes(10),
end of it_fcodes,
“Muestra el log del batch-input en la dyn 120.
begin of it_logcarga occurs 0.
*            cliente(50),
        include structure zclientes.
data: texto(150),
end of it_logcarga,
it_fieldcat type lvc_s_fcat occurs 0,
gt_fieldcat type slis_fieldcat_alv  occurs 0.

************************************************************************

*************************** CONTROLES DYNPROS **************************
controls: tab_clientes type tabstrip,
          tc_logcarga type tableview using screen 0120.
************************************************************************

************************** ESTRUCTURAS**********************************
data:      begin of g_tab_clientes,
             subscreen   like sy-dynnr,
             prog        like sy-repid value ‘ZMCLIENTES’,
             pressed_tab like sy-ucomm value c_tab_clientes-newcli,
           end of g_tab_clientes,

           wa_clientes like line of it_clientes.

************************************************************************

************************** VARIABLES ***********************************
data: ok_code like sy-ucomm,
      g_cod_buscar like wa_clientes-codigo, “buscar cliente dyn 111.
      g_modo(1) value c_visualizar,
      nomficnuevo type rlgrap-filename, ” Campo Ruta fichero
      rutafichcarga type rlgrap-filename, ” Campo Ruta fichero
      num_fich type i, “Número de ficheros seleccionado para carga.
      g_rbjuedat(1), “RadioButton para el juego de datos.
      g_rbbatinp(1), “RadioButton para el batch input.
      contenedor type ref to cl_gui_custom_container, “contenedor
      contenedorgrid type ref to cl_gui_container, “Grid Contenedor
      grid type ref to cl_gui_alv_grid.

************************************************************************

include ZMCLIENTES_PAI

 *&———————————————————————*
*&  Include           ZMCLIENTES_PAI
*&———————————————————————*

*&———————————————————————*
*&      Module  USER_COMMAND_0100  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
module user_command_0100 input.

  case ok_code.

      “Status de la pantalla
    when ‘CREAR’.
      g_modo = c_crear.
      clear: wa_clientes, g_cod_buscar, rutafichcarga, nomficnuevo,
             it_logcarga, it_clientes.
      refresh: it_logcarga, it_clientes.

      “Status de la pantalla
    when ‘MODIFICAR’.
      g_modo = c_modificar.
      “Status de la pantalla
    when ‘VISUALIZAR’.
      g_modo = c_visualizar.

    when ‘SAVE’.

      call function ‘Z_GUARDAR_CLIENTE’
        exporting
          l_modo  = g_modo
        changing
          wa_cli  = wa_clientes
        exceptions
          codigo  = 1
          guardar = 2
          others  = 3.

      if sy-subrc <> 0.
        message s003(zmclientes). “No se ha podido crear el cliente.
      else.
        message s000(zmclientes) with wa_clientes-codigo.
        g_cod_buscar = wa_clientes-codigo.
        perform inicializa_modo changing g_modo.
      endif.

    when ‘BUSCAR’. “Buscar un cliente.

      call function ‘CONVERSION_EXIT_ALPHA_INPUT’
        exporting
          input  = g_cod_buscar
        importing
          output = g_cod_buscar.

      call function ‘Z_BUSCAR_CLIENTE’
        exporting
          l_codigo     = g_cod_buscar
        tables
          t_clientes   = it_clientes
        exceptions
          noencontrado = 1
          others       = 2.

      if sy-subrc = 0.
        read table it_clientes into wa_clientes index 1.
      endif.

    when ‘GENERAR’.

      call function ‘Z_GENERAR_FICHERO_CLIENTES’
        exporting
          l_nomfich = nomficnuevo
        exceptions
          nocreado  = 1
          others    = 2.

      ” Selecciona ruta fichero carga.
    when ‘SELFICHCARGA’.

      perform ruta_fichero using rutafichcarga.
      “Carga el contenido del fichero excel en la tabla interna it_carga
      ” e it_logcarga
      perform carga_excel tables it_clientes
                                 it_logcarga
                           using rutafichcarga.

      ” Carga fichero clientes a través de un Batch-Input.
    when ‘CARGA’.

      “Batch-input crear clientes.
      perform carga_clientes tables it_clientes
                                    it_logcarga
                              using g_rbjuedat
                                    g_rbbatinp.

      perform inicializa_modo changing g_modo.
  endcase.
  clear ok_code.
endmodule.                 ” USER_COMMAND_0100  INPUT
*&———————————————————————*
*&      Module  SALIR  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
module salir input.
  leave program.
endmodule.                 ” SALIR  INPUT
*&———————————————————————*
*&      Module  PESTANA_ACTIVA  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
module pestana_activa input.

  case ok_code.
********************* TRATAMIENTO DE PESTAÑAS **************************
    when ‘NEWCLI’.
      g_tab_clientes-pressed_tab = c_tab_clientes-newcli.
      perform inicializa_modo changing g_modo.

    when ‘CARCLI’.
      g_tab_clientes-pressed_tab = c_tab_clientes-carcli.
      perform inicializa_modo changing g_modo.

    when ‘LISCLI’.
      g_tab_clientes-pressed_tab = c_tab_clientes-liscli.
      perform inicializa_modo changing g_modo.
************************************************************************
  endcase.

endmodule.                 ” PESTANA_ACTIVA  INPUT

include  ZMCLIENTES_PBO

 &———————————————————————*
*&  Include           ZMCLIENTES_PBO
*&———————————————————————*

*&SPWIZARD: OUTPUT MODULE FOR TS ‘TAB_CLIENTES’. DO NOT CHANGE THIS LINE
*&SPWIZARD: SETS ACTIVE TAB
module tab_clientes_active_tab_set output.
  tab_clientes-activetab = g_tab_clientes-pressed_tab.
  case g_tab_clientes-pressed_tab.
    when c_tab_clientes-newcli.
      g_tab_clientes-subscreen = c_subscr110.
    when c_tab_clientes-carcli.
      g_tab_clientes-subscreen = c_subscr120.
    when c_tab_clientes-liscli.
      g_tab_clientes-subscreen = c_subscr130.
    when others.
*&SPWIZARD:      DO NOTHING
  endcase.
endmodule.                    “TAB_CLIENTES_ACTIVE_TAB_SET OUTPUT
*&———————————————————————*
*&      Module  STATUS_0100  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status_0100 output.

* Según la pestaña en la que nos encontremos y si estamos modficando,
* visualizando o creando un nuevo cliente, visualizaremos unos botones
* en la barra de status u otros.

  case g_tab_clientes-pressed_tab.

    when c_tab_clientes-newcli.
      perform botones_tab_cliente tables it_fcodes using g_modo.
    when c_tab_clientes-carcli.
      perform botones_tab_carga tables it_fcodes using g_modo.
    when c_tab_clientes-liscli.

  endcase.

  set pf-status ’0100′ excluding it_fcodes.
  set titlebar ’0100′.

endmodule.                 ” STATUS_0100  OUTPUT
*&———————————————————————*
*&      Module  NUEVA_BUSQUEDA  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
module nueva_busqueda input.
  clear wa_clientes.
endmodule.                 ” NUEVA_BUSQUEDA  INPUT

*&SPWIZARD: OUTPUT MODULE FOR TC ‘TC_LOGCARGA’. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
module tc_logcarga_change_tc_attr output.
  describe table it_logcarga lines tc_logcarga-lines.
endmodule.                    “TC_LOGCARGA_CHANGE_TC_ATTR OUTPUT
*&———————————————————————*
*&      Module  STATUS_0110  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status_0110 output.

  perform campos_screen_gr1 using g_modo ‘GR1′.

endmodule.                 ” STATUS_0110  OUTPUT
*&———————————————————————*
*&      Module  STATUS_0120  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status_0120 output.

  perform campos_screen_gr1 using g_modo ‘GR1′.

endmodule.                 ” STATUS_0120  OUTPUT
*&———————————————————————*
*&      Module  STATUS_0111  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status_0111 output.

  perform campos_screen_gr2 using g_modo ‘GR2′.

endmodule.                 ” STATUS_0111  OUTPUT
*&———————————————————————*
*&      Module  STATUS_0130  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
module status_0130 output.
*  SET PF-STATUS ‘xxxxxxxx’.
*  SET TITLEBAR ‘xxx’.

  if contenedor is initial.

    create object contenedor
      exporting container_name = ‘CONTENEDOR’.

    create object grid
           exporting i_parent = contenedor.

  endif.
  perform obtener_datos tables it_clientes.
  perform mostrar_datos tables it_clientes.

endmodule.                 ” STATUS_0130  OUTPUT  

include  ZMCLIENTES_SUBRUTINAS 

 *&———————————————————————*
*&  Include           ZMCLIENTES_SUBRUTINAS
*&———————————————————————*
*&———————————————————————*
*&      Form  BOTONES_TAB_CLIENTE
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_FCODES  text
*      –>P_G_MODO  text
*———————————————————————-*
form botones_tab_cliente  tables t_fcodes structure it_fcodes
                          using lmodo.

  clear t_fcodes.
  refresh t_fcodes.

  case lmodo.
    when c_visualizar.
      append ‘VISUALIZAR’ to t_fcodes.
    when c_modificar.
      append ‘MODIFICAR’ to t_fcodes.
    when c_crear.
      append ‘CREAR’ to t_fcodes.
      append ‘MODIFICAR’ to t_fcodes.
  endcase.

endform.                    ” BOTONES_TAB_CLIENTE
*&———————————————————————*
*&      Form  RUTA_FICHERO
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_NOMBREFICHCARGA  text
*———————————————————————-*
form ruta_fichero  using    l_nombre.

  call function ‘F4_FILENAME’
    exporting
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
    importing
      file_name     = l_nombre.

endform.                    ” RUTA_FICHERO
*&———————————————————————*
*&      Form  CARGA_EXCEL
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_CARGA  text
*      –>P_NOMBREFICHCARGA  text
*———————————————————————-*
form carga_excel  tables   t_clientes structure zclientes
                           t_logcarga structure it_logcarga
                  using    l_nombre.

* Carga el contenido del fichero excel pasado como parámetro
* en la tabla interna indicada.

  field-symbols:<campo>.
  data: t_carga type alsmex_tabline occurs 0 with header line,
        wa like line of t_clientes,
        i type i.

  clear t_logcarga.
  refresh t_logcarga.
* Abrimos el excel y lo cargamos en una tabla interna.
  call function ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
    exporting
      filename                = l_nombre
      i_begin_col             = 3
      i_begin_row             = 3
      i_end_col               = 10
      i_end_row               = 10
    tables
      intern                  = t_carga
    exceptions
      inconsistent_parameters = 1
      upload_ole              = 2
      others                  = 3.

* Pasamos la tabla interna con los datos del excel a la tabla
* it_clientes con el fin de tratarla en el batch-input.
* También pasamos el contenido de t_carga a la tabla t_logcarga
* para mostrar los datos que vamos a cargar en el table control de
* la pestaña Carga.
  loop at t_carga.
    i = t_carga-col + 2.
    assign component i of structure wa to <campo>.
    check sy-subrc = 0.
    <campo> = t_carga-value.
    at end of row.
      append wa to t_clientes.
      clear wa.
    endat.
  endloop.

* Pasamos los datos a it_logcarga
  loop at t_clientes.
    move-corresponding t_clientes to t_logcarga.
    append t_logcarga.
  endloop.
endform.                    ” CARGA_EXCEL
*&———————————————————————*
*&      Form  CARGA_CLIENTES
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_CLIENTES  text
*———————————————————————-*
form carga_clientes  tables t_clientes structure zclientes
                            t_logcarga structure it_logcarga
                        using l_juegodatos
                              l_batchinput.

  data: it_bdcdata like table of bdcdata with header line,
        it_message like table of bdcmsgcoll with header line,
        filler12 like apqi-groupid.

  clear: it_bdcdata, t_logcarga.
  refresh: it_bdcdata, t_logcarga.

* Creamos el juego de datos
  if l_juegodatos is not initial.
    call function ‘BDC_OPEN_GROUP’
     exporting
       client                    = sy-mandt
*             DEST                      = FILLER8
             group                     = ‘AltaClientes’
*             HOLDDATE                  = FILLER8
*             KEEP                      = FILLER1
       user                      = sy-uname
*             RECORD                    = FILLER1
*             PROG                      = SY-CPROG
*           IMPORTING
*             QID                       =
     exceptions
       client_invalid            = 1
       destination_invalid       = 2
       group_invalid             = 3
       group_is_locked           = 4
       holddate_invalid          = 5
       internal_error            = 6
       queue_error               = 7
       running                   = 8
       system_lock_error         = 9
       user_invalid              = 10
       others                    = 11.
    if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno
              with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.

  endif.

  loop at t_clientes.

    clear:it_message.
    refresh: it_message.

    perform bdc_dynpro tables it_bdcdata using ‘ZMCLIENTES’ ’100′ ‘X’.

    perform bdc_field tables it_bdcdata using ‘BDC_OKCODE’
                                              ‘CREAR’.

    perform bdc_dynpro tables it_bdcdata using ‘ZMCLIENTES’ ’100′ ‘X’.

    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-NOMBRE’
                                              t_clientes-nombre.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-APELLIDO1′
                                              t_clientes-apellido1.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-APELLIDO2′
                                              t_clientes-apellido2.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-CALLE’
                                              t_clientes-calle.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-CODPOSTAL’
                                              t_clientes-codpostal.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-POBLACION’
                                              t_clientes-poblacion.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-PROVINCIA’
                                              t_clientes-provincia.
    perform bdc_field tables it_bdcdata using ‘WA_CLIENTES-PAIS’
                                              t_clientes-pais.

    perform bdc_field tables it_bdcdata using ‘BDC_OKCODE’
                                             ‘SAVE’.

    if l_batchinput is not initial.

      perform bdc_dynpro tables it_bdcdata using ‘ZMCLIENTES’ ’100′ ‘X’.
      perform bdc_field tables it_bdcdata using ‘BDC_OKCODE’
                                             ‘EXIT’.
      call transaction ‘ZMCLIENTES’ using it_bdcdata
                                 mode ‘N’
                                 update ‘S’
                                 messages into it_message.

      move-corresponding t_clientes to t_logcarga.

      if it_message[] is initial.
        t_logcarga-texto = ‘No se ha podido crear el cliente.’.
      else .
        t_logcarga-texto = ‘Cliente creado correctamente.’.
      endif.
      append t_logcarga.
      clear it_bdcdata.
      refresh it_bdcdata.
    endif.

    if l_juegodatos is not initial.

      move-corresponding t_clientes to t_logcarga.
      t_logcarga-texto = ‘Cliente incluido en el juego de datos.’.
      append t_logcarga.

    endif.
  endloop.

* Cerramos el juego de datos.
  if l_juegodatos is not initial.

    call function ‘BDC_INSERT’
 exporting
   tcode                  = ‘ZMCLIENTES’
*   POST_LOCAL             = NOVBLOCAL
*   PRINTING               = NOPRINT
*   SIMUBATCH              = ‘ ‘
*   CTUPARAMS              = ‘ ‘
      tables
        dynprotab              = it_bdcdata
 exceptions
   internal_error         = 1
   not_open               = 2
   queue_error            = 3
   tcode_invalid          = 4
   printing_invalid       = 5
   posting_invalid        = 6
   others                 = 7.
    if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno
                  with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.

    call function ‘BDC_CLOSE_GROUP’
      exceptions
        not_open    = 1
        queue_error = 2
        others      = 3.
    if sy-subrc <> 0.
      message id sy-msgid type sy-msgty number sy-msgno
              with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    endif.

  endif.

endform.                    ” CARGA_CLIENTES
*&———————————————————————*
*&      Form  BDC_DYNPRO
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_0183   text
*      –>P_0184   text
*      –>P_0185   text
*———————————————————————-*
form bdc_dynpro  tables lt_bdcdata structure bdcdata
                  using l_program
                        l_dynpro
                         l_dbegin.
  clear lt_bdcdata.
  lt_bdcdata-program = l_program.
  lt_bdcdata-dynpro = l_dynpro.
  lt_bdcdata-dynbegin = l_dbegin.
  append lt_bdcdata.

endform.                    ” BDC_DYNPRO
*&———————————————————————*
*&      Form  BDC_FIELD
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_BDCDATA  text
*      –>P_0185   text
*      –>P_T_CLIENTES_NOMBRE  text
*———————————————————————-*
form bdc_field  tables   lt_bdcdata structure bdcdata
                using    l_campo
                         l_valor.

  clear lt_bdcdata.
  lt_bdcdata-fnam = l_campo.
  lt_bdcdata-fval = l_valor.
  append lt_bdcdata.

endform.                    ” BDC_FIELD
*&———————————————————————*
*&      Form  CAMPOS_SCREEN
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form campos_screen_gr1 using value(l_modo)
                             value(l_grupo).

  data: l_valor type integer.

  if l_modo = c_visualizar.
    l_valor = 0.
  elseif l_modo = c_modificar  or
         l_modo = c_crear.
    l_valor = 1.
  endif.

  loop at screen.
    if screen-group1 = l_grupo.
      screen-input = l_valor.
      modify screen.
    endif.
  endloop.

endform.                    ” CAMPOS_SCREEN
*&———————————————————————*
*&      Form  BOTONES_TAB_CARGA
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_FCODES  text
*      –>P_G_MODO  text
*———————————————————————-*
form botones_tab_carga  tables t_fcodes structure it_fcodes
                        using  l_modo.

  clear t_fcodes.
  refresh t_fcodes.

  case l_modo.
    when c_visualizar.
      append ‘VISUALIZAR’ to t_fcodes.
      append ‘MODIFICAR’ to t_fcodes.
    when c_modificar.
      append ‘MODIFICAR’ to t_fcodes.
    when c_crear.
      append ‘MODIFICAR’ to t_fcodes.
  endcase.

endform.                    ” BOTONES_TAB_CARGA
*&———————————————————————*
*&      Form  CAMPOS_SCREEN_GR2
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_G_MODO  text
*      –>P_0107   text
*———————————————————————-*
form campos_screen_gr2  using value(l_modo)
                              value(l_grupo).

  data: l_valor type integer.

  if l_modo = c_crear  or
         l_modo = c_modificar.
    l_valor = 0.
  elseif l_modo = c_visualizar.
    l_valor = 1.
  endif.

  loop at screen.
    if screen-group1 = l_grupo.
      screen-input = l_valor.
      modify screen.
    endif.
  endloop.

endform.                    ” CAMPOS_SCREEN_GR2
*&———————————————————————*
*&      Form  INICIALIZA_MODO
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_G_MODO  text
*      <–P_G_MODO  text
*———————————————————————-*
form inicializa_modo changing modo.

  modo = c_visualizar.

endform.                    ” INICIALIZA_MODO
*&———————————————————————*
*&      Form  OBTENER_DATOS
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_CLIENTES  text
*———————————————————————-*
form obtener_datos  tables t_clientes structure it_clientes.

  select *
  into corresponding fields of table t_clientes
  from zclientes client specified
  where mandt = sy-mandt.

endform.                    ” OBTENER_DATOS
*&———————————————————————*
*&      Form  MOSTRAR_DATOS
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_CLIENTES  text
*———————————————————————-*
form mostrar_datos  tables t_clientes structure it_clientes.

  data: gs_layout type lvc_s_layo.

  call function ‘REUSE_ALV_FIELDCATALOG_MERGE’
    exporting
      i_program_name         = sy-cprog
      i_internal_tabname     = ‘IT_CLIENTES’
      i_inclname             = sy-cprog
    changing
      ct_fieldcat            = gt_fieldcat
    exceptions
      inconsistent_interface = 1
      program_error          = 2
      others                 = 3.

  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

  call function ‘LVC_TRANSFER_FROM_SLIS’
    exporting
      it_fieldcat_alv       = gt_fieldcat
*     IT_SORT_ALV           =
*     IT_FILTER_ALV         =
*     IS_LAYOUT_ALV         =
   importing
     et_fieldcat_lvc       = it_fieldcat[]
*     ET_SORT_LVC           =
*     ET_FILTER_LVC         =
*     ES_LAYOUT_LVC         =
    tables
      it_data               = it_clientes[]
   exceptions
     it_data_missing       = 1
     others                = 2
            .
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

  perform crear_layout using gs_layout.

  call method grid->set_table_for_first_display
    exporting
      is_layout       = gs_layout
    changing
      it_outtab       = t_clientes[]
      it_fieldcatalog = it_fieldcat[].

endform.                    ” MOSTRAR_DATOS
*&———————————————————————*
*&      Form  CREAR_LAYOUT
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form crear_layout using wa type lvc_s_layo.

  wa-zebra = ‘X’.
  wa-cwidth_opt = ‘X’.

endform.                    ” CREAR_LAYOUT

FUNCION Z_BUSCAR_CLIENTE

  tables: zclientes.

  ranges: r_codigo for zclientes-codigo,
          r_nombre for zclientes-nombre,
          r_apellido1 for zclientes-apellido1,
          r_apellido2 for zclientes-apellido2,
          r_calle for zclientes-calle,
          r_codpostal for zclientes-codpostal,
          r_poblacion for zclientes-poblacion,
          r_provincia for zclientes-provincia,
          r_pais for zclientes-pais.

  if l_codigo is not initial.
    r_codigo-sign = ‘I’.
    r_codigo-option = ‘EQ’.
    r_codigo-low = l_codigo.
    append r_codigo.
  endif.

  if l_nombre is not initial.
    r_nombre-sign = ‘I’.
    r_nombre-option = ‘CP’.
    r_nombre-low = l_nombre.
    append r_nombre.
  endif.

  if l_apellido2 is not initial.
    r_apellido1-sign = ‘I’.
    r_apellido1-option = ‘CP’.
    r_apellido1-low = l_apellido1.
    append r_apellido1.
  endif.

  if l_apellido2 is not initial.
    r_apellido2-sign =’I’.
    r_apellido2-option = ‘CP’.
    r_apellido2-low = l_apellido2.
    append r_apellido2.
  endif.

  if l_calle is not initial.
    r_calle-sign = ‘I’.
    r_calle-option = ‘CP’.
    r_calle-low = l_calle.
    append r_calle.
  endif.

  if l_codigo_postal is not initial.
    r_codpostal-sign = ‘I’.
    r_codpostal-option =’CP’.
    r_codpostal-low = l_codigo_postal.
    append r_codpostal.
  endif.

  if l_poblacion is not initial.
    r_poblacion-sign = ‘I’.
    r_poblacion-option = ‘CP’.
    r_poblacion-low = l_poblacion.
    append r_poblacion.
  endif.

  if l_provincia is not initial.
    r_provincia-sign = ‘I’.
    r_provincia-option =’CP’.
    r_provincia-low = l_provincia.
    append r_provincia.
  endif.

  if l_pais is not initial.
    r_pais-sign = ‘I’.
    r_pais-option = ‘CP’.
    r_pais-low = l_pais.
    append r_pais.
  endif.

  select *
       into corresponding fields of table t_clientes
       from zclientes client specified
       where mandt = sy-mandt and
            codigo in r_codigo and
            nombre in r_nombre and
            apellido1 in r_apellido1 and
            apellido2 in r_apellido2 and
            calle in r_calle and
            codpostal in r_codpostal and
            poblacion in r_poblacion and
            provincia in r_provincia and
            pais in r_pais.

  if sy-subrc <> 0.
    message s001(zmclientes) with l_codigo.
    raise noencontrado.
  endif.

endfunction.

Tablas más utilizadas


Este documento descargado de la web www.teknoda.com.ar, muestra las tablas más utilizadas de los módulos más comunes.

Funciones de interés


REUSE_ALV_FIELDCATALOG_MERGE.

Sirve para obtiener el catágolo de campos a partir de una estructura declarada en el diccionario de datos.

 LVC_TRANSFER_FROM_SLIS.

Se obtiene el catágolo de campos a usar con el método “set_table_for_first_display”.

Ejemplo:

type-pools: slis.


DATA: it_fieldcat type SLIS_T_FIELDCAT_ALV,
              it_lvcfcat type lvc_t_fcat,

            BEGIN OF it_data occurs 0,
                        vbeln like vbak-vbeln,
                       matnr like mara-matnr,
            END of it_data. 


CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’
EXPORTING
   I_PROGRAM_NAME               = sy-repid
   I_INTERNAL_TABNAME           = ‘IT_DATA’
   I_INCLNAME                   = ‘ZTEST_TOP’
  CHANGING
    ct_fieldcat                  = it_fieldcat
* EXCEPTIONS
*   INCONSISTENT_INTERFACE       = 1
*   PROGRAM_ERROR                = 2
*   OTHERS                       = 3
          .
IF sy-subrc  0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
 
 
CALL FUNCTION ‘LVC_TRANSFER_FROM_SLIS’
  EXPORTING
    it_fieldcat_alv       = it_fieldcat
*   IT_SORT_ALV           =
*   IT_FILTER_ALV         =
*   IS_LAYOUT_ALV         =
IMPORTING
   ET_FIELDCAT_LVC       = it_lvcfcat
*   ET_SORT_LVC           =
*   ET_FILTER_LVC         =
*   ES_LAYOUT_LVC         =
  tables
    it_data               = it_data
* EXCEPTIONS
*   IT_DATA_MISSING       = 1
*   OTHERS                = 2
          .
IF sy-subrc  0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

 

Uso de Splitter, eventos, celdas editables, cuadro de listas, gestión de botones estandar, creación botones propios.


He creado este programa a modo de ejemplo, para mostrar el uso de los manejadores de eventos, objetos, etc … más comúnes a la hora de crear un ALV. Utiliza las tablas SPFLI y  SBOOK (Itinerarios de vuelos y reservas).

El informe contiene un splitter con dos grid. El superior muestra los itinerarios de vuelos de las compañias. Al hacer doble click sobre un registro del grid superior, nos mostrará en el grid de abajo todas las reservas para ese vuelo.

Al hacer un doble click sobre un registro del grid inferior, mostrará un pop-up con dicho registro.

También muestra como crear una celda editable a nivel de columna(campo peso equipaje), así como un cuadro de lista(campo medida).

Sirve también de ejemplo, para ver como excluir los botones estandar de un ALV y crear nuestros propios botones.

Ejemplo ALV.

 REPORT  zvuelos.

TYPE-POOLS: slis.

********************* Tablas DD ****************************************
TABLES: spfli, sbook.
************************************************************************

********************* Tablas internas **********************************
DATA: it_vuelos TYPE TABLE OF spfli WITH HEADER LINE,
      it_reservas TYPE TABLE OF sbook WITH HEADER LINE,
      it_fieldcat TYPE lvc_t_fcat.
************************************************************************

********************* Estructuras **************************************
DATA: wa_layout   TYPE lvc_s_layo,
      wa_reservas LIKE LINE OF it_reservas.
************************************************************************

********************* Includes *****************************************
INCLUDE zvuelvos_clases.
************************************************************************
********************* Clases *******************************************
CLASS lcl_application DEFINITION DEFERRED.
CLASS cl_gui_cfw      DEFINITION LOAD.
************************************************************************

********************* Variables ****************************************
DATA: contenedor TYPE REF TO cl_gui_custom_container, “Contenedor.
      g_application TYPE REF TO lcl_application,
      splitter TYPE REF TO cl_gui_splitter_container,
      contenedorgrid1 TYPE REF TO cl_gui_container, “Grid Contenedor.
      contenedorgrid2 TYPE REF TO cl_gui_container, “Grid Contenedor.
      grid1 TYPE REF TO cl_gui_alv_grid,
      grid2 TYPE REF TO cl_gui_alv_grid.
************************************************************************

********************* Pantalla de Selección ****************************
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:
              so_cia FOR spfli-carrid,
              so_paiso FOR spfli-countryfr, “Clave pais origen
              so_ciuor FOR spfli-cityfrom, ” Ciudad origen
              so_paisd FOR spfli-countryto,” Clave pais destino
              so_ciude FOR spfli-cityto. “Ciudad destiono
SELECTION-SCREEN END OF BLOCK block1.
************************************************************************

START-OF-SELECTION.

  CALL SCREEN ’0100′.
*&———————————————————————*
*&      Module  STATUS_0100  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
MODULE status_0100 OUTPUT.
  SET PF-STATUS ‘STATUS0100′.
  SET TITLEBAR ‘TITLE0100′.

  IF contenedor IS INITIAL.

    CREATE OBJECT contenedor
        EXPORTING container_name = ‘CONTENEDOR’.

    CREATE OBJECT splitter
        EXPORTING parent = contenedor
                  rows = 2
                  columns = 1.

* Contenedores del splitter
    CALL METHOD splitter->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = contenedorgrid1.
* Contenedores del splitter
    CALL METHOD splitter->get_container
      EXPORTING
        row       = 2
        column    = 1
      RECEIVING
        container = contenedorgrid2.

    CREATE OBJECT grid1
          EXPORTING i_parent = contenedorgrid1.

    CREATE OBJECT grid2
          EXPORTING i_parent = contenedorgrid2.

    CREATE OBJECT g_application.
    SET HANDLER g_application->handle_double_clickgrid1 FOR grid1.
    SET HANDLER g_application->handle_toolbargrid1 FOR grid1.
    SET HANDLER g_application->handle_user_commandgrid1 FOR grid1.

    SET HANDLER g_application->handle_double_clickgrid2 FOR grid2.

    PERFORM obtener_datos_vuelos TABLES it_vuelos so_cia
                                                  so_paiso so_ciuor
                                                  so_paisd so_ciude.

    PERFORM mostrar_datos TABLES it_vuelos.

  ENDIF.

ENDMODULE.                 ” STATUS_0100  OUTPUT
*&———————————————————————*
*&      Module  SALIR  INPUT
*&———————————————————————*
*       text
*———————————————————————-*
MODULE salir INPUT.
  CASE sy-dynnr.
    WHEN ’0100′.
      LEAVE PROGRAM.
    WHEN ’0200′.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDMODULE.                 ” SALIR  INPUT
*&———————————————————————*
*&      Form  OBTENER_DATOS_VUELOS
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM obtener_datos_vuelos TABLES t_vuelos STRUCTURE spfli
                                 r_cia STRUCTURE so_cia
                                 r_paiso STRUCTURE so_paiso
                                 r_ciuor STRUCTURE so_ciuor
                                 r_paisd STRUCTURE so_paisd
                                 r_ciude STRUCTURE so_ciude.

  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE t_vuelos
  FROM spfli CLIENT SPECIFIED
  WHERE mandt = sy-mandt AND
        carrid IN r_cia AND
        countryfr IN r_paiso AND
        cityfrom IN r_ciuor AND
        countryto IN r_paisd AND
        cityto IN r_ciude.

ENDFORM.                    ” OBTENER_DATOS_VUELOS
*&———————————————————————*
*&      Form  MOSTRAR_DATOS
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_VUELOS  text
*———————————————————————-*
FORM mostrar_datos TABLES t_vuelos STRUCTURE spfli.

  CALL METHOD grid1->set_table_for_first_display
    EXPORTING
      i_structure_name = ‘SPFLI’
      is_layout        = wa_layout
    CHANGING
      it_outtab        = t_vuelos[].

ENDFORM.                    ” MOSTRAR_DATOS
*&———————————————————————*
*&      Form  OBTENER_RESERVA
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_VUELOS  text
*      –>P_E_ROW  text
*———————————————————————-*
FORM obtener_reserva  TABLES   t_vuelos STRUCTURE it_vuelos
                               t_reservas STRUCTURE it_reservas
                      USING fila.

  READ TABLE t_vuelos INDEX fila.
  IF sy-subrc = 0.
    SELECT *
    INTO CORRESPONDING FIELDS OF TABLE t_reservas
    FROM sbook CLIENT SPECIFIED
    WHERE mandt = sy-mandt AND
          carrid = t_vuelos-carrid AND
          connid = t_vuelos-connid.
  ENDIF.

ENDFORM.                    ” OBTENER_RESERVA
*&———————————————————————*
*&      Form  MOSTRAR_RESERVAS
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_RESERVAS  text
*———————————————————————-*
FORM mostrar_reservas TABLES t_reservas STRUCTURE it_reservas
                             t_fieldcat TYPE lvc_t_fcat.

  DATA: lt_excluir TYPE ui_functions.

  PERFORM generar_fieldcat_reservas USING ‘LUGGWEIGHT’ “Equipaje
                                          ‘WUNIT’ “Unidad Peso
                                    CHANGING t_fieldcat[].

  PERFORM cuadro_lista_grid2 USING ‘WUNIT’.
  PERFORM excluir_funciones CHANGING lt_excluir.

  CALL METHOD grid2->set_table_for_first_display
    EXPORTING
      i_structure_name = ‘SBOOK’
    CHANGING
      it_outtab        = t_reservas[]
      it_fieldcatalog  = t_fieldcat[].

* Set editable cells to ready for input initially
  CALL METHOD grid2->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

ENDFORM.                    ” MOSTRAR_RESERVAS
*&———————————————————————*
*&      Module  STATUS_0200  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*
MODULE status_0200 OUTPUT.
  SET PF-STATUS ‘STATUS0200′.
  SET TITLEBAR ‘TITLE0200′.

ENDMODULE.                 ” STATUS_0200  OUTPUT
*&———————————————————————*
*&      Form  EDITAR_RESERVA
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_IT_RESERVAS  text
*      <–P_WA_RESERVAS  text
*———————————————————————-*
FORM editar_reserva  TABLES t_reservas STRUCTURE it_reservas
                     USING fila
                     CHANGING wa LIKE wa_reservas.
  CLEAR wa.
  READ TABLE t_reservas INDEX fila.
  IF sy-subrc = 0.
    MOVE t_reservas TO wa.
  ENDIF.

ENDFORM.                    ” EDITAR_RESERVA
*&———————————————————————*
*&      Form  GENERAR_FIELDCAT_RESERVAS
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_T_RESERVAS  text
*———————————————————————-*
FORM generar_fieldcat_reservas  USING  campo_editable
                                       campo_lista
                                CHANGING t_fieldcat TYPE lvc_t_fcat.

  DATA: wa_fieldcat LIKE lvc_s_fcat.

  CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
   EXPORTING
*         I_BUFFER_ACTIVE              =
     i_structure_name             = ‘SBOOK’
     i_client_never_display       = ‘X’
*     i_bypassing_buffer           =
*     i_internal_tabname           =
    CHANGING
      ct_fieldcat                  = t_fieldcat
   EXCEPTIONS
     inconsistent_interface       = 1
     program_error                = 2
     OTHERS                       = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF campo_editable IS NOT INITIAL.
    LOOP AT t_fieldcat INTO wa_fieldcat.
      IF wa_fieldcat-fieldname = campo_editable.
        wa_fieldcat-edit = ‘X’.
        MODIFY t_fieldcat FROM wa_fieldcat.
      ENDIF.

    ENDLOOP.
  ENDIF.

  IF campo_lista IS NOT INITIAL.
    LOOP AT t_fieldcat INTO wa_fieldcat.
      IF wa_fieldcat-fieldname = campo_lista.
        wa_fieldcat-drdn_hndl =’1′.
        wa_fieldcat-outputlen = 7.
        MODIFY t_fieldcat FROM wa_fieldcat.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.                    ” GENERAR_FIELDCAT_RESERVAS
*&———————————————————————*
*&      Form  CUADRO_LISTA_GRID2
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_0404   text
*———————————————————————-*
FORM cuadro_lista_grid2  USING campo_lista.

  DATA: it_dropdownlist TYPE lvc_t_drop,
        wa_dropdownlist TYPE lvc_s_drop.

  wa_dropdownlist-handle = ’1′.
  wa_dropdownlist-value =’KG’.
  APPEND wa_dropdownlist TO it_dropdownlist.

  wa_dropdownlist-handle = ’1′.
  wa_dropdownlist-value =’G’.
  APPEND wa_dropdownlist TO it_dropdownlist.

  CALL METHOD grid2->set_drop_down_table
    EXPORTING
      it_drop_down = it_dropdownlist.

ENDFORM.                    ” CUADRO_LISTA_GRID2
*&———————————————————————*
*&      Form  EXCLUIR_FUNCIONES
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_LT_EXCLUIR  text
*———————————————————————-*
FORM excluir_funciones CHANGING t_excluir TYPE ui_functions..

  DATA ls_exclude TYPE ui_func.

  ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
  APPEND ls_exclude TO t_excluir.
  ls_exclude = cl_gui_alv_grid=>mc_fc_filter.
  APPEND ls_exclude TO t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
*  append ls_exclude to t_excluir.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
*  append ls_exclude to t_excluir.

ENDFORM.                    ” EXCLUIR_FUNCIONES

 *&———————————————————————*
*&  Include           ZVUELVOS_CLASES
*&———————————————————————*

CLASS lcl_application DEFINITION.

  PUBLIC SECTION.
    METHODS handle_double_clickgrid1
          FOR EVENT double_click OF cl_gui_alv_grid
          IMPORTING e_row e_column es_row_no.

    METHODS handle_double_clickgrid2
          FOR EVENT double_click OF cl_gui_alv_grid
          IMPORTING e_row e_column es_row_no.

    METHODS handle_toolbargrid1
          FOR EVENT toolbar OF cl_gui_alv_grid
          IMPORTING e_object e_interactive.

    METHODS handle_user_commandgrid1
          FOR EVENT user_command OF cl_gui_alv_grid
          IMPORTING e_ucomm.

ENDCLASS.                    “lcl_application DEFINITION
*———————————————————————-

*       CLASS lcl_application IMPLEMENTATION
*———————————————————————-

*
*———————————————————————-

CLASS lcl_application IMPLEMENTATION.

  METHOD handle_double_clickgrid1.
    PERFORM obtener_reserva TABLES it_vuelos
                                   it_reservas
                            USING e_row.

    PERFORM mostrar_reservas TABLES it_reservas
                                    it_fieldcat.
  ENDMETHOD.                    “handle_double_click

  METHOD handle_double_clickgrid2.
    PERFORM editar_reserva TABLES it_reservas
                           USING e_row
                           CHANGING wa_reservas.
    IF wa_reservas IS NOT INITIAL.
      CALL SCREEN ’0200′ STARTING AT 05 05
                           ENDING AT  80 15.
    ENDIF.

  ENDMETHOD.                    “handle_double_clickgrid2

  METHOD handle_toolbargrid1.

    DATA: ls_toolbar TYPE stb_button.

    CLEAR ls_toolbar.
    MOVE 3 TO ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    CLEAR ls_toolbar.
    MOVE 0 TO ls_toolbar-butn_type.
    MOVE ‘Tipo0′ TO ls_toolbar-function.
    MOVE icon_employee TO ls_toolbar-icon.
    MOVE ‘Tipo 0′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    MOVE 1 TO ls_toolbar-butn_type.
    MOVE ‘Tipo1′ TO ls_toolbar-function.
    MOVE icon_dummy TO ls_toolbar-icon.
    MOVE ‘Tipo 1′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    MOVE 2 TO ls_toolbar-butn_type.
    MOVE ‘Tipo2′ TO ls_toolbar-function.
    MOVE icon_dummy TO ls_toolbar-icon.
    MOVE ‘Tipo 2′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    MOVE 3 TO ls_toolbar-butn_type.
    MOVE ‘Tipo3′ TO ls_toolbar-function.
    MOVE icon_checked TO ls_toolbar-icon.
    MOVE ‘Tipo 3′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    MOVE 4 TO ls_toolbar-butn_type.
    MOVE ‘Tipo4′ TO ls_toolbar-function.
    MOVE icon_incomplete TO ls_toolbar-icon.
    MOVE ‘Tipo 4′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

    MOVE 5 TO ls_toolbar-butn_type.
    MOVE ‘Tipo5′ TO ls_toolbar-function.
    MOVE icon_failure TO ls_toolbar-icon.
    MOVE ‘Tipo 5′ TO ls_toolbar-quickinfo.
    APPEND ls_toolbar TO e_object->mt_toolbar.

  ENDMETHOD.             “handle_double_click

  METHOD handle_user_commandgrid1.
  ENDMETHOD.                    “user_command

ENDCLASS.                    “lcl_application IMPLEMENTATION

Resumen básico ALV OO


 cl_gui_custom_container  -> Contenedor ALV.

cl_gui_splitter_container -> Contenedor que muestra varias regillas ALV.

cl_gui_alv_grid -> Grid.

c l_gui_container -> Contenedor para el grid.  

Ejemplo:

 data: contenedor type ref to cl_gui_custom_container, “Contenedor.
            splitter type ref to cl_gui_splitter_container,
            contenedorgrid1 type ref to cl_gui_container, “Grid Contenedor.
            contenedorgrid2 type ref to cl_gui_container, “Grid Contenedor.
            grid1 type ref to cl_gui_alv_grid,
            grid2 type ref to cl_gui_alv_grid.

if contenedor is initial.

* Contenedor ALV
    create object contenedor
        exporting container_name = ‘CONTENEDOR’.

* Creamos el Splitter
    create object splitter
        exporting parent = contenedor
                  rows = 2
                  columns = 1.

* Contenedor del splitter
    call method splitter->get_container
      exporting
        row       = 1
        column    = 1
      receiving
        container = contenedorgrid1.
* Contenedor del splitter
    call method splitter->get_container
      exporting
        row       = 2
        column    = 1
      receiving
        container = contenedorgrid2.

* Creamos grid.
    create object grid1
          exporting i_parent = contenedorgrid1.

* Creamos grid.
    create object grid2
          exporting i_parent = contenedorgrid2.

endif.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.