27 marzo, 2012

Ejemplo Moodul Poole, carga datos.

Posted in Código de ejemplo tagged a 4:17 pm por sapyabap


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.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: