jueves, 5 de septiembre de 2013

Buscar un texto en un String


  Data: patt Type string Value '.',
  result_tab Type match_result_tab,
        lv_offset 
Type i,
        lv_lenght 
Type i.

  
Field-SYMBOLS <match> Like Line Of result_tab.
 “Offset contiene la posicion donde se encuentra el caracter en la cadena.
  
Find patt In  '127.280,01' Match Offset lv_offset Match Length lv_lenght.
      
  “De esta forma se deja en  resultado en una estructura que contiene
  “la posición de cada aparición del carácter(texto) buscado en la cadena
  “y la longitud   
  Find All Occurrences Of patt In 'Everybody knows this is nowhere' 

     RESULTS result_tab.

  
Loop At result_tab Assigning <match>.
    
Write: / <match>-offset, <match>-length.
  
Endloop.

lunes, 2 de septiembre de 2013

Crear un ALVGRID en un dynpro con un custom control

Vamos a crear un alvgrid en un dynpro por medio de un custom control el cual va a contener y a mostrar los datos de una consulta de datos.

Primero creamos el report:

REPORT  Z_ALVGRID_CUSTOM.

  Include z_alvgrid_dynpro_data.    "Include con las variables
  Include z_alvgrid_dynpro_func.    "Include con la clase que contiene los metodos a utilizar.

  Data: lv_routines Type Ref To routines, "hace referencia a la clase routines
        ok_code Like sy-ucomm.            "guarda los comandos de usuario

Initialization.

Start-Of-Selection.
  Create Object lv_routines.
  lv_routines->f_get_info( Importing e_result = gt_lfa1 ).  "Busca la informacion que que va a mostrar en el alvgrig de la dynpro
  If Lines( gt_lfa1 ) > 0.
    lv_routines->f_display_result( ).   "Muestra el resultado en el ALVGRID
    Call  Selection-Screen 0200.
  Endif.

 Include Z_PROCESS_BEFORE_OUTPUT. "Modulo PBO
 Include Z_PROCESS_AFTER_INPUT.   "Modulo PAI


*********Luego creamos la clase que contiene los métodos que van a ser llamados:

Class routines Definition Create Public.
  Public Section.
  Class-Methods:
            contructor,
            f_get_info Exporting e_result Type ty_lfa1,
            f_display_result.
  Private Section.
  Class-Data:
        lv_exception Type Ref To cx_root,
        lv_exception_text Type string.
Endclass.

Class routines Implementation.
  Method contructor.
  Endmethod.

  Method f_get_info.
    Try.
      Select * Into Corresponding Fields Of Table e_result From LFA1. " Up To 10 Rows.
    Catch cx_root Into lv_exception.
      lv_exception_text = lv_exception->get_text( ).
      Message s000(fb) With lv_exception_text.
    Endtry.
  Endmethod.

  Method f_display_result.
    Data lv_repid Type sy-repid.
    Try.
      lv_repid = sy-repid.
      "Crea el objeto de tipo cl_gui_custom_container quye hace referencia al Custom Control que se creo en el Dynpro
      Create Object gv_gui_custom Exporting container_name = 'GRID_CONTROL'.
      cl_salv_table=>factory( Exporting r_container = gv_gui_custom
                              Importing r_salv_table = gv_salv_table
                              Changing t_table = gt_lfa1 ).

      gv_selections = gv_salv_table->get_selections( ). "Seleccion multiple de columnas
      gv_selections->set_selection_mode( 2 ). "Single

      gv_salv_funtions = gv_salv_table->get_functions( ).
      gv_salv_funtions->set_all( abap_true ). "Funciones toolbar

      gv_salv_table->display( ).
    Catch cx_root Into lv_exception.
      lv_exception_text = lv_exception->get_text( ).
      Message s000(fb) With lv_exception_text.
    Endtry.
  Endmethod.

Endclass.


*******Los  Modulos PAI y PBO

MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'STATUS_DYNPRO'.
  SET TITLEBAR 'T-01'.

ENDMODULE.             



MODULE USER_COMMAND_0200 INPUT.
  Data: fcode Like ok_code.
  fcode = ok_code.
  Clear ok_code.
  Case fcode.
    When 'BACK'.
      Leave To Screen 0.
    When 'EXIT'.
      Leave To Screen 0.
    When 'CANCEL'.
      Leave To Screen 0.
    When 'CMD'.
      Message s000(fb) With 'Command User!'.
      gv_salv_table->get_metadata( ).
      gt_data_row = gv_selections->get_selected_rows( ).
  Endcase.
ENDMODULE.                 


******Por ultimo les muestro como quedan la layout del dynpro y el status del mismo



Crear mensajes múltiples en un programa ABAP

Hay ocasiones en los que necesitamos crear un log de algún tipo de proceso en lote, existe la posibilidad de crear un mensaje para cada error que se presenta y mostrarlos todos en una misma ventana.
El código sería el siguiente:

Data: lt_bapiret Type Table Of BAPIRET2,
      ls_bapiret 
Type BAPIRET2 .

ls_bapiret
-type = 'I'.
ls_bapiret
-ID = 'FB'.
ls_bapiret
-number = '001'.
ls_bapiret
-row = '0001'.

Append ls_bapiret To lt_bapiret .

ls_bapiret
-Type = 'W'.
ls_bapiret
-Id = 'FB'.
ls_bapiret
-Number = '002'.
ls_bapiret
-row = '0002'.

Append ls_bapiret To lt_bapiret .

CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
  
TABLES
    I_BAPIRET2_TAB 
= lt_bapiret.





Crear un pedido de venta autilizando BAPIS

La primera vez que intente crear un pedido de venta utilizando BAPIS tuve dificultades con las condiciones ya que solo creaba la condición de la primera posición, por tal motivo me gustaría compartir la forma como finalmente me funcionó.
Espero sea de utilidad para ustedes.

Form f_pedido_venta.
  Data: ls_header Type bapisdhd1,
        lt_partners Type Standard Table Of bapiparnr,
        ls_partner Type bapiparnr,
        lt_items Type Standard Table Of bapisditm,
        ls_item Type bapisditm,
        lt_schedule Type Standard Table Of bapischdl,
        ls_schedule Type bapischdl,
        lt_condiciones Type Standard Table Of bapicond,
        ls_condicion Type bapicond,
        lt_return Type Standard Table Of bapiret2,
        ls_return Type bapiret2,
        posicion(6) Type n,
        lv_documento Like BAPIVBELN-VBELN.
  Data: lv_exception Type Ref To cx_root,
        lv_exception_text Type String.

  Clear: ls_header,
  lt_items[],
  lt_condiciones[],
  lt_partners[],
  lt_schedule[],
  lt_return[].

    Loop At i_tab_hdr.
      ls_header-doc_type = i_tab_hdr-auart.
      ls_header-sales_org = i_tab_hdr-vkorg.
      ls_header-distr_chan = i_tab_hdr-vtweg.
      ls_header-division =  i_tab_hdr-spart.
      ls_header-sales_off = i_tab_hdr-vkbur.
      ls_header-sales_grp = i_tab_hdr-vkgrp.
      ls_header-purch_no_c = i_tab_hdr-bstkd.
      ls_header-purch_date = i_tab_hdr-bstdk.

      ls_partner-partn_role = 'AG'.
      ls_partner-partn_numb = i_tab_hdr-kunnr.
      Append ls_partner To lt_partners.

      posicion = 0.

      Loop At i_tab_dtl Where bstkd = i_tab_hdr-bstkd And auart = i_tab_hdr-auart.
        Clear: ls_item, ls_condicion, ls_schedule.
        posicion = posicion + 10.
        ls_item-itm_number = posicion.
        ls_item-material = i_tab_dtl-matnr.
        ls_item-target_qty = i_tab_dtl-kwmeng.
        ls_item-plant = i_tab_dtl-werks.
        ls_item-ship_point = i_tab_dtl-vstel.
        ls_item-store_loc = i_tab_dtl-lgort.
        ls_item-incoterms1 = i_tab_dtl-inco1.
        ls_item-Currency = i_tab_dtl-koein.
        ls_item-target_qu = i_tab_dtl-kmein.
        "ls_item-sales_unit = i_tab_dtl-koein.
        "ls_item-profit_ctr = i_tab_dtl-prctr.
        Append ls_item To lt_items.

        "Condiciones
        Data: lv_monto Like bapicurr-bapicurr,
              lv_base_cond type BAPIKAWRT1.

        Call Function 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
          Exporting Currency = i_tab_dtl-koein amount_internal = i_tab_dtl-kbetr
            Importing amount_external = lv_monto.

        ls_condicion-itm_number   = posicion.
        ls_condicion-cond_type    = 'ZP01'.
        ls_condicion-cond_value   = lv_monto.
        ls_condicion-Currency     = i_tab_dtl-koein.
        ls_condicion-cond_unit    = i_tab_dtl-kmein.
        ls_condicion-cond_p_unt   = 1.
        Append ls_condicion To lt_condiciones.

        ls_schedule-itm_number = posicion.
        ls_schedule-req_qty = 1.
        Append ls_schedule To lt_schedule.
      Endloop.

      Clear lv_documento.
      Try .
        Call Function 'BAPI_SALESORDER_CREATEFROMDAT2'
        Exporting
          order_header_in               = ls_header
          behave_when_error             = space
        Importing
          salesdocument                 = lv_documento
        Tables
          Return                        = lt_return
          order_items_in                = lt_items
          order_partners                = lt_partners
          order_schedules_in            = lt_schedule
          order_conditions_in           = lt_condiciones .

        If lv_documento Is Not Initial.
          Call Function 'BAPI_TRANSACTION_COMMIT' Exporting Wait   = 'X' Importing Return = ls_return.

          "Pedido de Venta grabado
          Perform f_delete_cond Using lv_documento.
          Loop At lt_return Into ls_return Where Type = 'S'.
            Write: ls_return-Message.
            gs_output-texto = ls_return-Message.
            Append gs_output To gt_output.
          Endloop.
        Else.
          Loop At lt_return Into ls_return Where Type = 'E'.
            Write: ls_return-Message.
            gs_output-texto = ls_return-message.
            Append gs_output TO gt_output.
          Endloop.
        Endif.
      Catch cx_root Into lv_exception.
        lv_exception_text = lv_exception->get_text( ).
        Message s000(fb) With lv_exception_text.
      Endtry.

    Endloop.

Endform.                    "f_pedido_venta