Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Carlos

Páginas: 1 2 [3] 4 5 ... 12
31
Programación ABAP / Re:Duda
« en: 19 de Agosto de 2011, 08:30:33 am »
Hola,

Aparte de lo que comenta Enrique (que esta perfecto), quiero puntualizar un consejo.

Cuando utilices la instrucción FOR ALL ENTRIES IN it_client, como sugerencia debes de meter dentro de un IF el SELECT.

IF it_client[] IS NOT INITIAL.
  SELECT kunag fkdat fktyp waerk netwr INTO TABLE it_vbrk
    FROM vbrk FOR ALL ENTRIES IN it_client
   WHERE fktyp = tipofact
     AND kunag <> IT_client-kunag.
ENDIF.


De esta manera conseguimos que si tu tabla interna (en este caso... it_client) no tuviera resultados evitamos que entre al SELECT porque te seleccionaría todos los resultados.




32
Programación ABAP / Re:Base de Datos Lógica PNP
« en: 16 de Agosto de 2011, 02:44:53 pm »
Si estas dentro de tu programa solo tienes que ir a:

  • Pasar a / Atributos

Y una vez allí tienes un botón que pone Clase report HR luego en el radio Button Datos  maestro Infotipos tienes las opciones que quieras para configurar la pantalla.



33
Includes / INCLUDE para realizar ALV con Objetos
« en: 08 de Julio de 2011, 11:56:54 am »
Aquí dejo un Include para realizar ALV con Objetos

  • 1REP -> Primera llamada en Report (previa a CALL SCREEN).
  • 2REP -> Cambios en la descripción de los campos de la cab. del listado
  • 3REP -> Asignar o quitar la propiedad 'Campo Clave'
  • 1PBO -> Primera llamada en PBO. Container, Status y Título.
  • 2PBO -> Realización de un SPLIT en el listado.
  • 3PBO -> Listado simple.
  • 4PBO -> Picture en un container.


************************************************************************
********************** INCLUDE ZMETODOS ********************************
************************************************************************
*
* Índice
*
* 1REP -> Primera llamada en Report (previa a CALL SCREEN).
* 2REP -> Cambios en la descripción de los campos de la cab. del listado
* 3REP -> Asignar o quitar la propiedad 'Campo Clave'
*
* 1PBO -> Primera llamada en PBO. Container, Status y Título.
* 2PBO -> Realización de un SPLIT en el listado.
* 3PBO -> Listado simple.
* 4PBO -> Picture en un container.
*
*---------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  CLASS lcl_event_receiver DEFINITION.
    PUBLIC SECTION.

*      methods handle_data_changed
*        for event data_changed of cl_gui_alv_grid
*        importing er_data_changed.

  ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  class lcl_event_receiver implementation.
*
*    method handle_data_changed.
*      perform data_changed using er_data_changed.
*    endmethod.
*
*  endclass.

************************************************************************
* Declaraciones.
************************************************************************
  TYPE-POOLS: slis.

  DATA: repname LIKE sy-repid.

* Declaraciones generales para métodos.
  DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
        lo_event_receiver   TYPE REF TO lcl_event_receiver,
        go_grid_listado     TYPE REF TO cl_gui_alv_grid,
        g_container_listado TYPE scrfname.

* Declaraciones Layout.
  DATA: gs_layout    TYPE lvc_s_layo,
        gs_variant   TYPE disvariant,
        gt_fieldcat  TYPE lvc_t_fcat,
        gt_fieldcat2 TYPE lvc_t_fcat,
        gt_sort      TYPE lvc_t_sort,
        fieldtab TYPE slis_t_fieldcat_alv,
        gs_fieldcat TYPE lvc_s_fcat,
        gs_fieldtab TYPE slis_fieldcat_alv.

  FIELD-SYMBOLS: <fieldcat> TYPE lvc_s_fcat,
                 <fs> TYPE LVC_S_FCAT.

* Variables para hacer el split del container.
*    data: container TYPE REF TO cl_gui_custom_container,
  DATA: container_1 TYPE REF TO cl_gui_container,
        container_2 TYPE REF TO cl_gui_container,
        splitter TYPE REF TO cl_gui_splitter_container.

* Variables para añadir el logo en el listado.
  TYPE-POOLS cndp.
  DATA: url(132),
        query_table LIKE w3query OCCURS 1 WITH HEADER LINE,
        html_table LIKE w3html OCCURS 1,
        return_code LIKE  w3param-ret_code,
        content_type LIKE  w3param-cont_type,
        content_length LIKE  w3param-cont_len,
        pic_data LIKE w3mime OCCURS 0,
        pic_size TYPE i,
        picture_1 TYPE REF TO cl_gui_picture,
        picture_2 TYPE REF TO cl_gui_picture.

************************************************************************
* Primera llamada en Report (previa a CALL SCREEN). (*)
************************************************************************
  FORM 1rep USING p_repname
                  p_tablename TYPE slis_tabname
                  indicador.

* Recogida de atributos de todos los campos de la tabla interna.
*
* Importante!!: La tabla interna no se tiene que definir como un data
* referenciado a una estructura type (Si se hace de este modo no
* reconocerá ningún campo). Utilizar siempre:
* Data begin of .....  occurs 0.
* Data end of ......
* No utilizar tampoco: Data: itab type standard table of ...............
*
    CLEAR: fieldtab.
    REFRESH: fieldtab.

    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
         EXPORTING
              i_program_name     = p_repname
              i_internal_tabname = p_tablename
              i_inclname         = p_repname
         CHANGING
              ct_fieldcat        = fieldtab.

* Asignación de atributos.

* El indicador nos dice si se trata de 1 tabla o de 2 tablas
* principalmente para utilizarlo en un listado tipo SPLIT.
    CASE indicador.
      WHEN '1'.
        CLEAR: gt_fieldcat.
        REFRESH: gt_fieldcat.
      WHEN '2'.
        CLEAR: gt_fieldcat2.
        REFRESH: gt_fieldcat2.
    ENDCASE.

    LOOP AT fieldtab INTO gs_fieldtab.
      CLEAR: gs_fieldcat.
      gs_fieldcat-fieldname  = gs_fieldtab-fieldname.
      gs_fieldcat-ref_table  = gs_fieldtab-ref_tabname.
      gs_fieldcat-outputlen  = gs_fieldtab-outputlen.
      gs_fieldcat-key        = gs_fieldtab-key.
      gs_fieldcat-tabname    = p_tablename.
      gs_fieldcat-scrtext_l  = gs_fieldtab-seltext_l.
      gs_fieldcat-scrtext_m  = gs_fieldtab-seltext_m.
      gs_fieldcat-scrtext_s  = gs_fieldtab-seltext_s.
      gs_fieldcat-coltext    = gs_fieldtab-seltext_m.
      gs_fieldcat-selddictxt = 'L'.
*    gs_fieldcat-edit       = gs_fieldtab-edit.
*    gs_fieldcat-auto_value = 'X'.

      CASE indicador.
        WHEN '1'.
          APPEND gs_fieldcat TO gt_fieldcat.
        WHEN '2'.
          APPEND gs_fieldcat TO gt_fieldcat2.
      ENDCASE.

    ENDLOOP.

  ENDFORM.

************************************************************************
* Segunda llamada en Report (previa a CALL SCREEN).
* Cambios en la descripción de los campos de la cabecera del listado.
************************************************************************
  FORM 2rep USING var1
                  pf_fieldname
                  pf_coltext
                  pf_scrtext_l
                  pf_scrtext_m
                  pf_scrtext_s.

    CASE var1.
      WHEN '1'.
        READ TABLE gt_fieldcat WITH KEY fieldname = pf_fieldname
           ASSIGNING <fieldcat>.
      WHEN '2'.
        READ TABLE gt_fieldcat2 WITH KEY fieldname = pf_fieldname
           ASSIGNING <fieldcat>.
    ENDCASE.

    IF sy-subrc EQ 0.
* Si el cuarto campo vale 'X' entonces todas las descripciones serán
* iguales.
      IF pf_scrtext_l = 'X'.
        <fieldcat>-scrtext_l    = pf_coltext.
        <fieldcat>-scrtext_m    = pf_coltext.
        <fieldcat>-scrtext_s    = pf_coltext.
        <fieldcat>-coltext      = pf_coltext.

      ELSE.
        <fieldcat>-scrtext_l    = pf_scrtext_l.
        <fieldcat>-scrtext_m    = pf_scrtext_m.
        <fieldcat>-scrtext_s    = pf_scrtext_s.
        <fieldcat>-coltext      = pf_coltext.
      ENDIF.
    ENDIF.

  ENDFORM.

************************************************************************
* Tercera llamada en Report (previa a CALL SCREEN).
* Asignar o quitar la propiedad 'Campo Clave'.
************************************************************************
  FORM 3rep USING var1 TYPE fieldname
                  var2 TYPE char1.

* Esta form asigna o quita la propiedad de campo clave. Los campos clave
* aparecen en color azul a la izquierda de la pantalla, y se quedan
* bloqueados sin que se puedan mover.
    TRANSLATE var1 TO UPPER CASE.
    READ TABLE gt_fieldcat WITH KEY fieldname = var1 ASSIGNING <fs>.
    IF sy-subrc EQ 0.
      <fs>-key = var2.
    ENDIF.

  ENDFORM.

************************************************************************
* Primera llamada en PBO. Container, Status y Título. (*)
************************************************************************
  FORM 1pbo USING var1 var2 var3.

    SET PF-STATUS var2.
    SET TITLEBAR var3.

    MOVE: var1 TO g_container_listado.

* Refrescamos el container si no estaba vacío.
    IF NOT go_custom_container IS INITIAL.
      CALL METHOD go_custom_container->free.
    ENDIF.

* Creamos el container.
    CREATE OBJECT go_custom_container
                 EXPORTING container_name = g_container_listado.

  ENDFORM.

************************************************************************
* Segunda llamada en PBO.  (*)
* Realización de un SPLIT en el listado.
* Este form es NO COMPATIBLE con el 3PBO (uno u otro).
************************************************************************
  FORM 2pbo TABLES tab1 tab2.

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

    CALL METHOD splitter->get_container
                      EXPORTING row      = 1
                                column   = 1
                      RECEIVING container = container_1.

    CALL METHOD splitter->get_container
                  EXPORTING row      = 1
                            column   = 2
                  RECEIVING container = container_2.

    CREATE OBJECT go_grid_listado
               EXPORTING i_parent = container_1.

    CREATE OBJECT lo_event_receiver.

    CALL METHOD go_grid_listado->register_edit_event
            EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.

    gs_layout-zebra      = 'X'.
    gs_layout-cwidth_opt = 'X'.
*    gs_layout-ctab_fname = 'COLOR_CELDAS'.
    gs_variant-report = repname.

    CALL METHOD go_grid_listado->set_table_for_first_display
         EXPORTING                     " i_buffer_active = 'X'
                   i_save          = 'A'
                   is_variant      = gs_variant
                   is_layout       = gs_layout
         CHANGING  it_fieldcatalog = gt_fieldcat
                   it_sort         = gt_sort
                   it_outtab       = tab1[].


    CREATE OBJECT go_grid_listado
                   EXPORTING i_parent = container_2.

    CREATE OBJECT lo_event_receiver.

    CALL METHOD go_grid_listado->register_edit_event
            EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.

    gs_layout-zebra      = 'X'.
    gs_layout-cwidth_opt = 'X'.
*    gs_layout-ctab_fname = 'COLOR_CELDAS'.
    gs_variant-report = repname.

    CALL METHOD go_grid_listado->set_table_for_first_display
            EXPORTING                     " i_buffer_active = 'X'
                      i_save          = 'A'
                      is_variant      = gs_variant
                      is_layout       = gs_layout
            CHANGING  it_fieldcatalog = gt_fieldcat2
                      it_sort         = gt_sort
                      it_outtab       = tab2[].

  ENDFORM.

************************************************************************
* Tercera llamada en PBO.  (*)
* Listado simple.
* Este form es NO COMPATIBLE con el 2PBO (uno u otro).
************************************************************************
  FORM 3pbo TABLES tab1.

    CREATE OBJECT go_grid_listado
               EXPORTING i_parent = go_custom_container.

    CREATE OBJECT lo_event_receiver.

    CALL METHOD go_grid_listado->register_edit_event
            EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.

    gs_layout-zebra      = 'X'.
    gs_layout-cwidth_opt = 'X'.
*    gs_layout-ctab_fname = 'COLOR_CELDAS'.
    gs_variant-report = repname.

    CALL METHOD go_grid_listado->set_table_for_first_display
         EXPORTING                     " i_buffer_active = 'X'
                   i_save          = 'A'
                   is_variant      = gs_variant
                   is_layout       = gs_layout
         CHANGING  it_fieldcatalog = gt_fieldcat
                   it_sort         = gt_sort
                   it_outtab       = tab1[].

  ENDFORM.

************************************************************************
* Cuarta llamada en PBO.
* *.gif en un container.
*
* Crear la picture en SE38 -> Entorno -> Repository SAP Web ->
* -> Pincho datos Binarios... -> Crear
* Actualizar tb. los tipos MIME si fuera necesario (para añadir *.gif).
* Actualizar tb. el editor MIME para ese tipo si fuera necesario.
*
* Llamar con nombre de la picture creada y con la variable container.
* Ejemplo:
*   PERFORM gif_en_container USING 'ZLOGO' go_custom_container.
*
************************************************************************
  FORM gif_en_container USING var1 var2.

* Creamos la "picture" correspondiente.
    CREATE OBJECT picture_1
                  EXPORTING parent  = var2.

* Extracción de la URL.
    REFRESH query_table.
    query_table-name = '_OBJECT_ID'.
    query_table-value = var1.
    APPEND query_table.

    CALL FUNCTION 'WWW_GET_MIME_OBJECT'
         TABLES
              query_string        = query_table
              html                = html_table
              mime                = pic_data
         CHANGING
              return_code         = return_code
              content_type        = content_type
              content_length      = content_length
         EXCEPTIONS
              object_not_found    = 1
              parameter_not_found = 2
              OTHERS              = 3.
    IF sy-subrc = 0.
      pic_size = content_length.
    ENDIF.

    CALL FUNCTION 'DP_CREATE_URL'
         EXPORTING
              type     = 'image'
              subtype  = cndp_sap_tab_unknown
              size     = pic_size
              lifetime = cndp_lifetime_transaction
         TABLES
              data     = pic_data
         CHANGING
              url      = url
         EXCEPTIONS
              OTHERS   = 1.

* Cargamos la imagen en el listado.
    CALL METHOD picture_1->load_picture_from_url
            EXPORTING url = url.

    CALL METHOD cl_gui_cfw=>flush
            EXCEPTIONS cntl_system_error = 1
                       cntl_error = 2.
    IF sy-subrc <> 0.
    ENDIF.

  ENDFORM.


34
CRM / Re:Algun manual para CRM Web
« en: 29 de Junio de 2011, 09:13:52 am »
Hola,

No hay mucha información de este tema, pero puedes mirar en este enlace.
http://www.saptechnical.com/Tutorials/CRM/Index.htm


35
Programación ABAP / Re: Convertir cantidad a formato interno de SAP
« en: 06 de Mayo de 2011, 10:52:30 am »
Hola.

No conozco ninguna función estándar de SAP que lo haga, pero tengo un PERFORM preparado para estas ocasiones. Esta función esta bien porque dependiendo del usuario podemos saber cual es el formato de salida que tenemos que utilizar.

Código: [Seleccionar]
*&---------------------------------------------------------------------*
*&      Form  FORMATO_INTERNO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM formato_interno  USING    p_qty.

  DATA: v_dcpfm TYPE usr01-dcpfm.

  SELECT SINGLE dcpfm INTO v_dcpfm
           FROM usr01
          WHERE bname EQ sy-uname.

  IF v_dcpfm = space.
    TRANSLATE p_qty USING '. '.
    TRANSLATE p_qty USING ',.'.
    CONDENSE  p_qty NO-GAPS.
  ELSE.
    TRANSLATE p_qty USING ', '.
    TRANSLATE p_qty USING '.,'.
    CONDENSE  p_qty NO-GAPS.
  ENDIF.


ENDFORM.                    " FORMATO_INTERNO


Saludos.

36
Programación ABAP / Re: Crear un alv oo con "n" entradas en blanco.
« en: 03 de Mayo de 2011, 03:17:47 pm »
Hola Cristina,

Te cuento lo que yo suelo hacer.

Vas a la SE93, donde te creas las transacciones y en los valores de propuesta pones en el campo Transación el valor SM30 y marcas el checkbox de omitir imagen inicial.

Luego en el table control que esta al final de la pantalla pones las siguientes entradas:
En el nombre del campo de dynpro: VIEWNAME  Valor: TU_TABLA
y una segunda línea en el campo dynpro: UPDATE Valor: X

De esta manera simulas la SM30 por una transacción y no tienes que hacer ningún programa.


Un saludo.

37
Reports / Como leer los Textos de los Infotipos
« en: 28 de Abril de 2011, 11:47:39 am »
Para los que no estamos muy puestos en la programación de HR (yo incluido), muchas veces nos cuesta buscar ciertas cosas.

La pista para empezar a buscar me la dio que en los infotipos existe el campo ITXEX que indica cuando existe un texto para ese infotipo.

En uno de los manuales que tengo encontré la forma de recuperarlo.

Adjunto un ejemplo del código... Hay que utilizar el INCLUDE rpc1tx00.

Código: [Seleccionar]
INCLUDE: rpc1tx00.           "Definition Cluster TX

...

IF NOT p0015-itxex IS INITIAL.
  CLEAR tx-key.
  MOVE-CORRESPONDING p0015 TO tx-key.
  rp-imp-c1-tx.
  IF sy-subrc NE 0.
*    WRITE: / 'Cluster tx wurde geloescht.'(001).
  ENDIF.


  LOOP AT ptext.
    CONCATENATE ptext-line i_listado-cluster_tx
           INTO i_listado-cluster_tx SEPARATED BY space.
*    WRITE: / ptext-line.
  ENDLOOP.
ENDIF.

38
Programación ABAP / Re: Modificar Textos Infotipos
« en: 28 de Abril de 2011, 11:42:34 am »
Te pongo un programa de ejemplo para que puedas seguirlo.

Código: [Seleccionar]
REPORT  ztexto_infotipo.


INCLUDE rpcitx00.
INCLUDE rpcitd00.

INFOTYPES: 2001.

DATA: gt_p2001 LIKE p2001 OCCURS 0 WITH HEADER LINE.

DATA: gf_pernr LIKE p2001-pernr,
      gf_begda LIKE p2001-begda,
      gf_endda LIKE p2001-endda,
      l_len    TYPE i,
      gf_key   LIKE pskey,
      gf_text(200).



gf_pernr = '888777'.
gf_begda = '20110101'.
gf_endda = '20111231'.
gf_text  = 'Texto de prueba...'.



* Se recupera la información del infotipo 2001
CLEAR gt_p2001[].
CALL FUNCTION 'HR_READ_INFOTYPE'
  EXPORTING
    pernr           = gf_pernr
    infty           = '2001'
    begda           = gf_begda
    endda           = gf_endda
  TABLES
    infty_tab       = gt_p2001
  EXCEPTIONS
    infty_not_found = 1
    OTHERS          = 2.


READ TABLE gt_p2001 WITH KEY begda = gf_begda
                             endda = gf_endda.

IF sy-subrc EQ 0.

  IF gf_text IS NOT INITIAL.
    MOVE-CORRESPONDING gt_p2001 TO gf_key.
*   Dividimos el texto en partes
    DO 3 TIMES.
      l_len = STRLEN( gf_text ).
      IF l_len >= 72.
        l_len = 72.
      ENDIF.
      ptext-line = gf_text(l_len).
      APPEND ptext.
      gf_text = gf_text+l_len.
      IF gf_text IS INITIAL.
        EXIT.
      ENDIF.
    ENDDO.
  ENDIF.

  EXPORT ptext TO DATABASE pcl1(tx) ID gf_key.
ENDIF.


39
Varios / Explicación de búsquedas
« en: 18 de Abril de 2011, 12:12:52 pm »
Para los que tenemos mala memoria...  :D

EQ (=)
NE (<>)
GT (>)
LT (<)
GE (>=)
LE (<=)

BT (Between)
NB (Not Between)
CP (like '*' o '+')   "Contiene...
NP (not like '*' o '+')  "No contiene...
CO (contiene sólo ...)
CN (no contiene sólo ...)
CA (contiene algún ...)
NA (no contiene algún ...)
CS (contiene el string ...)
NS (no contiene el string ...)



40
Programación ABAP / Re: MATCH CODE
« en: 13 de Diciembre de 2010, 09:16:41 am »
Hola,

Aquí te paso un enlace donde tienes un ejemplo de como crearte un matchcode desde una tabla interna. (Creo que es lo que estabas preguntando)

Ejemplo Matchcode desde tabla interna


Saludos.

41
Simplemente es un mensaje de advertencia, después de que te salga el mensaje que comentas, le das al ENTER y solucionado, siempre sale ese mensaje cuando nadie lo ha creado anteriormente.

Luego te saldrá un mensaje tipo POPUP que de dirá algo así:


Include ZXMBCU01 no existe.
¿ Desea crear el objeto ?
    SI         NO     Cancelar



Y listo..

Un saludo y espero que se solucione tu problema.

42
Bueniiiisimo el programa, me ha encantado... muchas gracias.

Solo me gustaría comentar que donde se ve la cara en la siguiente línea...

p_linea(8)   TO r_event-low.

en realidad es...
Código: [Seleccionar]
p_linea(8)   TO r_event-low.

Gran aporte si señor!!!

43
Programación ABAP / Simbolo EURO € en un report
« en: 01 de Junio de 2010, 11:03:51 am »
Hola,

¿alguien sabe si se puede poner el símbolo del Euro () en un Report de los antiguos?

No veo la forma de hacerlo...

Muchas gracias de antemano.


44
Programación ABAP / Re: Modificar contenido del campo VBRK-XBLNR
« en: 29 de Abril de 2010, 12:05:56 pm »
Muchas gracias por tu aporte Ariel, seguro que a mas de uno le viene bien.

 ;)

45
Programación ABAP / Re: GUI_DOWNLOAD separado por '|'
« en: 22 de Abril de 2010, 05:41:47 pm »
Tienes que utilizar esta otra función: SAP_CONVERT_TO_TEX_FORMAT


Te adjunto un ejemplo.
Código: [Seleccionar]
TYPE-POOLS: truxs.

DATA: gt_salida2 TYPE  truxs_t_text_data.

  CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
    EXPORTING
      i_field_seperator          = '|'
*     I_LINE_HEADER              =
*     I_FILENAME                 =
*     I_APPL_KEEP                = ' '
    TABLES
      i_tab_sap_data             = gt_salida
    CHANGING
      i_tab_converted_data       = gt_salida2
    EXCEPTIONS
      conversion_failed          = 1
      OTHERS                     = 2.

Un saludo.

Páginas: 1 2 [3] 4 5 ... 12