jueves, 5 de septiembre de 2013

Buscar un texto en un String


  Datapatt 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.

  Datalv_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_infoImporting e_result gt_lfa1 ).  "Busca la informacion que que va a mostrar en el alvgrig de la dynpro
  If Linesgt_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(fbWith 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=>factoryExporting 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)"Single

      gv_salv_funtions gv_salv_table->get_functions).
      gv_salv_funtions->set_allabap_true )"Funciones toolbar

      gv_salv_table->display).
    Catch cx_root Into lv_exception.
      lv_exception_text lv_exception->get_text).
      Message s000(fbWith 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.
  Datafcode 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(fbWith '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:

Datalt_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.
  Datals_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(6Type n,
        lv_documento Like BAPIVBELN-VBELN.
  Datalv_exception Type Ref To cx_root,
        lv_exception_text Type String.

  Clearls_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.
        Clearls_itemls_condicionls_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
        Datalv_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'.
            Writels_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'.
            Writels_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(fbWith lv_exception_text.
      Endtry.

    Endloop.

Endform.                    "f_pedido_venta