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 - abapito

Páginas: 1 ... 3 4 [5]
61
Programación ABAP / Re: Cambiar Idioma Maestro a una tabla
« en: 17 de Junio de 2008, 05:30:13 pm »
Muchas gracias por la respuesta, pero en la pestaña de los atributos el campo no me permirte modificarlo.


Saludos.

62
Programación ABAP / Cambiar Idioma Maestro a una tabla
« en: 16 de Junio de 2008, 06:29:30 pm »
Hola, me he copiado una tabla de SAP a una tabla 'Z'.

El caso es que ahora el idioma maestro de la tabla nueva es el Aleman 'DE'.

¿Se puede cambiar el idioma maestro para la nueva tabla que me he creado?


Saludos y gracias.

63
Programación ABAP / Re: Bloque de una transaccion
« en: 28 de Mayo de 2008, 06:52:48 pm »
Hola, de autorizaciones no entiendo.

Pero mientras alguien te cuenta como hacerlo igual puedes hacer una chapucilla.

Pregunta dentro del codigo en el AT SELECTION-SCREEN OUTPUT por ese usuario, y cuando sea "él" :o le lanzas un mensaje de error.

Por ejemplo:
Código: [Seleccionar]

AT SELECTION-SCREEN OUTPUT.
  IF sy-uname = 'PEPITO'.
*-- El usuario no está autorizado para esta acción
    MESSAGE E094(EM).
  ENDIF.


Te lo comento como chapucilla hasta que te den otra solución.

Un saludo.

64
Programación ABAP / Colorear celda de ALV
« en: 22 de Mayo de 2008, 09:46:48 am »
Hola, lo que quiera saber es si se puede colorear una celda o varias celdas independientes con colores.

No quiero colorear toda la columna, lo que necesito es colorear unas celdas determinadas que cumplen una condición.


Muchas gracias de antemano.


65
Includes / Include para pantallas de selección
« en: 07 de Mayo de 2008, 04:53:01 pm »
Hola quería mostraros este include que suelo utilizar para las pantallas de selección.

Fuente sacada del siguiente http://enlace

Mediante esta librería se pueden realizar de forma sencilla pantallas de selección con logos, tabstrips, etc...
Todas las funciones están comentadas y recomiendo leer la cabecera para tener un conocimiento previo de como usarlo.

Código: [Seleccionar]
************************************************************************
*
*  REPORT ZISELSCN
*
*  DESCRIPCIÓN: Include con macros y forms para la creación de pantallas
*  de selección.
*
*  INSTRUCCIONES: Se han definido las siguientes macros y forms para un
*  correcto funcionamiento:
*---------------------------------------------------------------------*
*    Macro para poner un checkbox en un selection screen
*    PARAMETROS:
*       &1 - Nombre del checkbox
*       &2 - Elemento de texto para el checkbox
*       &3 - Valor por defecto para el checkbox
*    Ejemplo:
*      definir_checkbox p_check text-c01 'X'.
*---------------------------------------------------------------------*
*    Macro para poner un radiobutton en un selection screen
*    PARAMETROS:
*       &1 - Nombre del radiobutton
*       &2 - Elemento de texto para el radiobutton
*       &3 - Grupo al que pertenece el radiobutton
*    Ejemplo:
*      definir_radiobutton p_radio text-c02 GRP1.
*---------------------------------------------------------------------*
*    Macro para poner un parametro en un selection screen
*    PARAMETROS:
*       &1 - Nombre del parametro
*       &2 - Elemento de texto para el parametro
*       &3 - Elemento de datos al que se parece (Definición LIKE)
*       &4 - Valor por defecto
*    Ejemplo:
*      definir_parametro p_nombre text-c01 kna1-kunnr '00045'.
*---------------------------------------------------------------------*
*    Macro para poner una bandeja en un selection screen
*    PARAMETROS:
*       &1 - Nombre de la bandeja
*       &2 - Longitud de la bandeja
*       &3 - Valor por defecto
*       &4 - Descripción de la bandeja
*    Ejemplo:
*      definir_bandeja p_nombre 15 ' ' text-c01.
*---------------------------------------------------------------------*
*    Macro para poner una ventana en la que dibujar el logo
*    PARAMETROS:
*       &1 - Nombre de la ventana
*       &2 - Lineas de la ventana
*    Ejemplo:
*      definir_pantalla_logo logo 5.
*      ¡¡IMPORTANTE!! ADEMAS DE ESTA MACRO HABRA QUE EJECUTAR EL FORM
*      definir_pantalla_logo en el INITIALIZATION.
*---------------------------------------------------------------------*
*    FORMS:
*---------------------------------------------------------------------*
*       FORM selscn_actualizar_pantalla.- Realiza un refresco de la
*       pantalla.
*---------------------------------------------------------------------*
*       FORM selscn_aniadir_linea_bandeja.- Prepara una linea de una
*       bandeja para despues, una vez rellena la tabla llamar al form
*       rellenar_tabla_bandeja
*            -->  P_KEY:  Valor de la linea
*            -->  P_TEXT: Texto a mostrar en la linea
*---------------------------------------------------------------------*
*       FORM selscn_rellenar_tabla_bandeja.- Asigna una serie de valores
*       que previamente se han cargado mediante el form
*       selscn_aniadir_linea_bandeja
*            -->  VALUE(P_PARAMETER): Texto con el nombre del parametro
*                 al que asignarle la tabla.
*---------------------------------------------------------------------*
*       FORM selscn_leer_valor_de_pantalla.- Recupera de la pantalla de
*       selección un valor antes de que se actualice.
*            -->  F_REPID -> Nombre del programa, normalmente SY-REPID
*            -->  F_DYNNR -> Número de dynpro, normalmente SY-DYNNR
*            -->  F_FIELDNAME_IN -> Nombre del campo que pretendemos
*                 recuperar
*            -->  F_FIELDVALUE -> Valor recuperado
*---------------------------------------------------------------------*
*       FORM selscn_definir_pantalla_logo.- Este form deberá utilizarse
*       siempre en el evento INITIALIZATION pasandole:
*            -->P_BLOQUE   Nombre del bloque del selection screen donde
*               este definido el logo.
*            -->P_DYNNR    Nº de dynpro donde este definido el logo.
*            -->P_CONTROL  Control del dynpro en el que se integrará el
*               logo
*---------------------------------------------------------------------*
*
*  MÓDULO AL QUE PERTENECE:
*
*  AUTOR: Ignacio Arnaiz Piorno                        FECHA: 06-09-2004
*  CONTACTO: i_arnaiz@sanesteban.com
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
*   AUTOR         EMPRESA     FECHA       MOTIVO
* ..........      .......   DD/MM/AA  ................................
* ..........      .......   DD/MM/AA  ................................
*-----------------------------------------------------------------------
************************************************************************
*INCLUDE ZISELSCN.

************************************************************************
*                       INCLUDES
************************************************************************

************************************************************************
* Definición de type pools
************************************************************************
  TYPE-POOLS:  vrm. " Para parametros de bandeja
  TYPE-POOLS: rsds. " Para selecciones dinámicas
************************************************************************
* Definición de constantes
************************************************************************
  CONSTANTS: c_logo_screen(100) VALUE 'ZLOGO_COMPAÑIA'.

* Para creación dinámica de selecciones
  CONSTANTS: c_selscn_prog_dinam LIKE sy-repid VALUE 'SAPLSSEL',
             c_selscn_dynn_dinam LIKE sy-dynnr VALUE '2001'.
************************************************************************
* Definición de variables
************************************************************************
  DATA:
      i_slscn_list TYPE vrm_values,
                          " Tabla de valores para cargar una bandeja
      gd_slscn_valor LIKE LINE OF i_slscn_list,
      gd_selection_id TYPE rsdynsel-selid. " ID. para selección dinámica


  DATA l_selscnid(1000).


************************************************************************
* Definición de estructuras
************************************************************************

************************************************************************
* Definición de tablas internas
************************************************************************
  DATA i_campos_selscn    LIKE TABLE OF screen-name.
  DATA i_campos_selscn_wa LIKE LINE OF i_campos_selscn.


  DATA gd_selscn_fields     TYPE rsdsfields OCCURS 0 WITH HEADER LINE.
  DATA gd_selscn_fields_exc TYPE rsdsfields OCCURS 0 WITH HEADER LINE.

************************************************************************
* Definición de parámetros
************************************************************************

************************************************************************
* Definición de rango de selección
************************************************************************

************************************************************************
* Definición de la pantalla de selección
************************************************************************

************************************************************************
* Definición de FIELD-SYMBOLS
************************************************************************
  FIELD-SYMBOLS <fs_selscn_campo> TYPE ANY.
************************************************************************
* Definición de MACROS
************************************************************************
*-- Macro para poner un checkbox en un selection screen
*-- &1 - Nombre del checkbox
*-- &2 - Elemento de texto para el checkbox
*-- &3 - Valor por defecto para el checkbox
  DEFINE definir_checkbox.
    selection-screen begin of line.
    parameters: &1 as checkbox default &3.
    selection-screen comment 3(60) &2.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner un radiobutton en un selection screen
*-- &1 - Nombre del radiobutton
*-- &2 - Elemento de texto para el radiobutton
*-- &3 - Grupo al que pertenece el radiobutton
  DEFINE definir_radiobutton.
    selection-screen begin of line.
    parameters: &1 radiobutton group &3.
    selection-screen comment 3(60) &2.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner un radiobutton en un selection screen con commando
*-- &1 - Nombre del radiobutton
*-- &2 - Elemento de texto para el radiobutton
*-- &3 - Grupo al que pertenece el radiobutton
*-- &4 - Grupo al que pertenece el radiobutton
  DEFINE definir_radiobutton_commando.
    selection-screen begin of line.
    parameters: &1 radiobutton group &3 user-command &4.
    selection-screen comment 3(60) &2.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner un parametro en un selection screen
*-- &1 - Nombre del parametro
*-- &2 - Elemento de texto para el parametro
*-- &3 - Elemento de datos al que se parece
*-- &4 - Valor por defecto
  DEFINE definir_parametro.
    selection-screen begin of line.
    selection-screen comment 1(30) &2.
    selection-screen position pos_low.
    parameters: &1 like &3 default &4.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner una bandeja en un selection screen
*-- &1 - Nombre de la bandeja
*-- &2 - Longitud de la bandeja
*-- &3 - Valor por defecto
*-- &4 - Descripción de la bandeja
  DEFINE definir_bandeja.
    selection-screen begin of line.
    selection-screen comment 1(30) &4.
    selection-screen position pos_low.
    parameters: &1 as listbox visible length &2 default &3.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner una bandeja en un selection screen
*-- &1 - Nombre de la bandeja
*-- &2 - Longitud de la bandeja
*-- &3 - Valor por defecto
*-- &4 - Descripción de la bandeja
  DEFINE definir_bandeja_obligatoria.
    selection-screen begin of line.
    selection-screen comment 1(30) &4.
    selection-screen position pos_low.
    parameters: &1 as listbox visible length &2 default &3 obligatory.
    selection-screen end of line.
  END-OF-DEFINITION.
*-- Macro para poner una ventana en la que dibujar el logo
*-- &1 - Nombre de la ventana
*-- &2 - Lineas de la ventana
  DEFINE definir_pantalla_logo.
    selection-screen begin of tabbed block &1 for &2 lines.
    selection-screen end of block &1.
  END-OF-DEFINITION.


*-- Macro para rellenar la tabla con los campos del select dinámico
*-- &1 - Nombre de la tabla
*-- &2 - Lineas del campo
  DEFINE selscn_add_dinamic_fields.
* No puede almacenar más de 70
    describe table gd_selscn_fields lines sy-tabix.
    if sy-tabix < 70.
      gd_selscn_fields-tablename = &1.
      gd_selscn_fields-fieldname = &2.
      append gd_selscn_fields.
    endif.
  END-OF-DEFINITION.

*-- Macro para rellenar select-options o rangos
*-- &1 - Nombre del select-option o el rango
*-- &2 - Valor option
*-- &3 - Valor sign
*-- &4 - Valor low
*-- &5 - Valor high
  DEFINE selscn_add_ranges.
    &1-option = &2.
    &1-sign   = &3.
    &1-low    = &4.
    &1-high   = &5.
    append &1.
  END-OF-DEFINITION.
************************************************************************
*
*                  FORMS ADICIONALES
*
************************************************************************
*---------------------------------------------------------------------*
*       FORM SELSCN_aniadir_linea_bandeja                             *
*---------------------------------------------------------------------*
*       Prepara una linea de una bandeja para despues, una vez rellena*
*       la tabla llamar al form rellenar_tabla_bandeja                *
*---------------------------------------------------------------------*
*  -->  P_KEY:  Valor de la linea                                     *
*  -->  P_TEXT: Texto a mostrar en la linea                           *
*---------------------------------------------------------------------*
  FORM selscn_aniadir_linea_bandeja                         "#EC CALLED
                                    USING p_key             "#EC *
                                          p_text.           "#EC *

    gd_slscn_valor-key = p_key.
    gd_slscn_valor-text = p_text.
    APPEND gd_slscn_valor TO i_slscn_list.


  ENDFORM.                    "SELSCN_aniadir_linea_bandeja

*---------------------------------------------------------------------*
*       FORM SELSCN_rellenar_tabla_bandeja                            *
*---------------------------------------------------------------------*
*       Asigna una serie de valores que previamente se han cargado    *
*       mediante el form añadir_linea_bandeja
*---------------------------------------------------------------------*
*  -->  VALUE(P_PARAMETER): Texto con el nombre del parametro al que  *
*       asignarle la tabla.                                           *
*---------------------------------------------------------------------*
  FORM selscn_rellenar_tabla_bandeja                        "#EC CALLED
                                     USING value(p_parameter)."#EC *

    DATA name TYPE vrm_id.

    name = p_parameter.

    CALL FUNCTION 'VRM_SET_VALUES'
      EXPORTING
        id     = name
        values = i_slscn_list.

    REFRESH i_slscn_list.
    CLEAR i_slscn_list.

  ENDFORM.                    "SELSCN_rellenar_tabla_bandeja


*---------------------------------------------------------------------*
*       FORM SELSCN_leer_valor_de_pantalla                            *
*---------------------------------------------------------------------*
*       Recupera de la pantalla de selección un valor antes de que se *
*       actualice.                                                    *
*---------------------------------------------------------------------*
*  -->  F_REPID -> Nombre del programa, normalmente SY-REPID          *
*  -->  F_DYNNR -> Número de dynpro, normalmente SY-DYNNR             *
*  -->  F_FIELDNAME_IN -> Nombre del campo que pretendemos recuperar  *
*  -->  F_FIELDVALUE -> Valor recuperado                              *
*---------------------------------------------------------------------*
  FORM selscn_leer_valor_de_pantalla                        "#EC CALLED
                              USING f_repid                 "#EC *
                                    f_dynnr                 "#EC *
                              value(f_fieldname_in)         "#EC *
                           CHANGING f_fieldvalue.           "#EC *

    DATA: ltab_fields TYPE TABLE OF dynpread.
    DATA: ltab_fields_wa LIKE LINE OF ltab_fields.
    DATA: lc_dyname LIKE sy-repid.
    DATA: lc_dynumb LIKE sy-dynnr.

    ltab_fields_wa-fieldname = f_fieldname_in.
    APPEND ltab_fields_wa TO ltab_fields.

    lc_dyname = f_repid.

    lc_dynumb = f_dynnr.

    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        dyname     = lc_dyname
        dynumb     = lc_dynumb
      TABLES
        dynpfields = ltab_fields
      EXCEPTIONS
        OTHERS     = 01.

    IF sy-subrc IS INITIAL.
      READ TABLE ltab_fields INDEX 1 INTO ltab_fields_wa.
*-- Return the value from the screen
      IF sy-subrc EQ 0.
        f_fieldvalue = ltab_fields_wa-fieldvalue.
      ENDIF.
    ENDIF.
  ENDFORM.                    "SELSCN_leer_valor_de_pantalla

*---------------------------------------------------------------------*
*       FORM selscn_escribir_valor_pantalla                            *
*---------------------------------------------------------------------*
*       Actualiza en la pantalla de selección un valor antes de que se*
*       actualice la pantalla.                                        *
*---------------------------------------------------------------------*
*  -->  F_REPID -> Nombre del programa, normalmente SY-REPID          *
*  -->  F_DYNNR -> Número de dynpro, normalmente SY-DYNNR             *
*  -->  F_FIELDNAME_IN -> Nombre del campo que pretendemos modificar  *
*  -->  F_FIELDVALUE -> Valor a pasar                                 *
*---------------------------------------------------------------------*
  FORM selscn_escribir_valor_pantalla                       "#EC CALLED
                              USING f_repid                 "#EC *
                                    f_dynnr                 "#EC *
                              value(f_fieldname_in)         "#EC *
                           CHANGING f_fieldvalue.           "#EC *

    DATA: ltab_fields TYPE TABLE OF dynpread.
    DATA: ltab_fields_wa LIKE LINE OF ltab_fields.
    DATA: lc_dyname LIKE sy-repid.
    DATA: lc_dynumb LIKE sy-dynnr.

    ltab_fields_wa-fieldname  = f_fieldname_in.
    ltab_fields_wa-fieldvalue = f_fieldvalue.

    APPEND ltab_fields_wa TO ltab_fields.

    lc_dyname = f_repid.

    lc_dynumb = f_dynnr.


    CALL FUNCTION 'DYNP_UPDATE_FIELDS'
      EXPORTING
        dyname               = lc_dyname
        dynumb               = lc_dynumb
        request              = 'A'
      TABLES
        dynpfields           = ltab_fields
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        undefind_error       = 7
        OTHERS               = 8.

    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.                    "SELSCN_escribir_valor_pantalla

*---------------------------------------------------------------------*
*       FORM SELSCN_cargar_logo_en_screen                             *
*---------------------------------------------------------------------*
*       Asigna un logo al la pantalla de selección, para ello es      *
*       es necesario primero subir dicho logo a SAP por medio del     *
*       programa SAPMWWW0 (Transacción SMW0).                         *
*---------------------------------------------------------------------*
*  -->  P_CONTAINER Contenedor que se crea en la pantalla             *
*  -->  P_LOGO      Nombre del logo que hay que colocar               *
*---------------------------------------------------------------------*
  FORM selscn_cargar_logo_en_screen                         "#EC CALLED
                                    USING p_container       "#EC *
                                          p_logo.           "#EC *

* URL requerida para dibujar el logo en pantalla
    DATA url(255).
* Objeto contenedor
    DATA logo_container TYPE REF TO cl_gui_custom_container.
* Objeto imagen
    DATA logo_picture TYPE REF TO cl_gui_picture.

* Creamos el contenedor
    CREATE OBJECT logo_container
       EXPORTING container_name = p_container.

* Creamos el objeto imagen asignando el contenedor
    CREATE OBJECT logo_picture
       EXPORTING  parent = logo_container
       EXCEPTIONS error = 1.

* Request an URL from the data provider by exporting the pic_data.
    PERFORM selscn_load_pic_from_db USING p_logo
                             CHANGING url.

* Cargamos el logo
    CALL METHOD logo_picture->load_picture_from_url
      EXPORTING
        url = url.
    IF sy-subrc NE 0.
    ENDIF.

* Hacemos que estire la imagen para colocarlo en todo el contenedor
    CALL METHOD logo_picture->set_display_mode
      EXPORTING
        display_mode = logo_picture->display_mode_fit_center
      EXCEPTIONS
        error        = 1.

  ENDFORM.                    " SELSCN_cargar_logo_en_screen

*&---------------------------------------------------------------------*
*&      Form  SELSCN_LOAD_PIC_FROM_DB
*&---------------------------------------------------------------------*
*       RECUPERA UNA IMAGEN DE SAP Y LA CONVIERTE PARA PODER UTILIZARLA
*       (recogida del programa RSDEMO_PICTURE_CONTROL)
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
  FORM selscn_load_pic_from_db                              "#EC CALLED
                           USING p_image                    "#EC *
                        CHANGING url.                       "#EC *
    DATA query_table TYPE TABLE OF w3query.
    DATA query_table_wa LIKE LINE OF query_table.
    DATA html_table TYPE TABLE OF w3html.
    DATA return_code TYPE  w3param-ret_code.
    DATA content_type TYPE  w3param-cont_type.
    DATA content_length TYPE  w3param-cont_len.
    DATA pic_data TYPE TABLE OF w3mime.
    DATA pic_size TYPE i.

    REFRESH query_table.
    query_table_wa-name = '_OBJECT_ID'.
    query_table_wa-value = p_image.
    APPEND query_table_wa TO 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.                                       "#EC *


  ENDFORM.                               " SELSCN_LOAD_PIC_FROM_DB

*&---------------------------------------------------------------------*
*&      Form  selscn_definir_pantalla_logo
*&---------------------------------------------------------------------*
*       Este from deberá utilizarse siempre en el evento INITIALIZATION
*       pasandole
*----------------------------------------------------------------------*
*      -->P_BLOQUE   Nombre del bloque del selection screen donde este
*                    definido el logo.
*      -->P_DYNNR    Nº de dynpro donde este definido el logo.
*      -->P_CONTROL  Control del dynpro en el que se integrará el logo
*----------------------------------------------------------------------*
  FORM selscn_definir_pantalla_logo                         "#EC CALLED
                             USING    p_bloque              "#EC *
                                      p_dynnr               "#EC *
                                      p_control.            "#EC *

    DATA l_aux(50).

    FIELD-SYMBOLS <bloque> TYPE ANY.

    CONCATENATE p_bloque '-prog' INTO l_aux.
    ASSIGN (l_aux) TO <bloque>.
    <bloque> = sy-repid.

    CONCATENATE p_bloque '-dynnr' INTO l_aux.
    ASSIGN (l_aux) TO <bloque>.
    <bloque> = p_dynnr.

    IF sy-batch IS INITIAL.
      PERFORM selscn_cargar_logo_en_screen
                  USING
                     p_control
                     c_logo_screen.
    ENDIF.

  ENDFORM.                    " selscn_definir_pantalla_logo

*&---------------------------------------------------------------------*
*&      Form  selscn_importar_campos_screen
*&---------------------------------------------------------------------*
*       Lanzandolo al comienzo del programa recogera todos los
*       parametros almacenados con el perform
*       selscn_exportar_campos_screen
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
  FORM selscn_importar_campos_screen.                       "#EC CALLED


    LOOP AT SCREEN.
      IF  NOT screen-name(1) = '%'
      AND NOT screen-name = 'SSCRFIELDS'.
        i_campos_selscn_wa = screen-name.
        APPEND i_campos_selscn_wa TO i_campos_selscn.
        SPLIT screen-name AT '-' INTO i_campos_selscn_wa screen-name.
        IF sy-subrc IS INITIAL.
          CONCATENATE i_campos_selscn_wa '[]' INTO i_campos_selscn_wa.
          APPEND i_campos_selscn_wa TO i_campos_selscn.
        ENDIF.
      ENDIF.
    ENDLOOP.

    DELETE ADJACENT DUPLICATES FROM i_campos_selscn.

    SORT i_campos_selscn.

    LOOP AT i_campos_selscn INTO i_campos_selscn_wa.
      ASSIGN (i_campos_selscn_wa) TO <fs_selscn_campo>.
      IF sy-subrc IS INITIAL.
        CONCATENATE '&' sy-repid '-' i_campos_selscn_wa '&'
               INTO l_selscnid.
        IMPORT campo TO <fs_selscn_campo> FROM MEMORY ID l_selscnid.
      ENDIF.
    ENDLOOP.

  ENDFORM.                    " selscn_importar_campos_screen

*&---------------------------------------------------------------------*
*&      Form  selscn_exportar_campos_screen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
  FORM selscn_exportar_campos_screen.                       "#EC CALLED

    LOOP AT i_campos_selscn INTO i_campos_selscn_wa.
      ASSIGN (i_campos_selscn_wa) TO <fs_selscn_campo>.
      IF sy-subrc IS INITIAL.
        CONCATENATE '&' sy-repid '-' i_campos_selscn_wa '&'
               INTO l_selscnid.
        EXPORT campo FROM <fs_selscn_campo> TO MEMORY ID l_selscnid.
      ENDIF.
    ENDLOOP.

  ENDFORM.                    " selscn_exportar_campos_screen


*&---------------------------------------------------------------------*
*&      Form  SELSCN_ACTUALIZAR_PANTALLA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
  FORM selscn_actualizar_pantalla.                          "#EC CALLED

    DATA lt_dynpread TYPE TABLE OF dynpread.
    DATA lt_dynpread_wa LIKE LINE OF lt_dynpread.
    FIELD-SYMBOLS <fs_campo> TYPE ANY.

    DATA l_repid LIKE sy-repid.
    DATA l_dynnr LIKE sy-dynnr.

    LOOP AT SCREEN.
      IF  NOT screen-name(1) = '%'
      AND NOT screen-name = 'SSCRFIELDS'.
        lt_dynpread_wa-fieldname = screen-name.
        ASSIGN (screen-name) TO <fs_campo>.
        IF sy-subrc IS INITIAL.
          IF NOT <fs_campo> IS INITIAL.
           WRITE <fs_campo> TO lt_dynpread_wa-fieldvalue LEFT-JUSTIFIED.
          ENDIF.
          APPEND lt_dynpread_wa TO lt_dynpread.
        ENDIF.
      ENDIF.
      CLEAR lt_dynpread_wa.
    ENDLOOP.

    l_repid = sy-repid.
    l_dynnr = sy-dynnr.

    CALL FUNCTION 'DYNP_UPDATE_FIELDS'
      EXPORTING
        dyname               = l_repid
        dynumb               = l_dynnr
        request              = 'A'
      TABLES
        dynpfields           = lt_dynpread
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        undefind_error       = 7
        OTHERS               = 8.
    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.                    " SELSCN_ACTUALIZAR_PANTALLA


*&---------------------------------------------------------------------*
*&      Form  selscn_rango_dinamico
*&---------------------------------------------------------------------*
*       Programa donde aprender más: BUQAUSWERT_GEN
*       Este form genera una pantalla de selección de forma dinámica
*       a partir de los campos que se le indica en la tabla
*       p_lt_fields_tab rellenando posteriormente la tabla P_LT_WHERE
*       de modo que se puede llegar a construir a partir de ella un
*       select de manera dinámica.
*----------------------------------------------------------------------*
*      -->P_LT_WHERE               Tabla salida para select
*      -->P_LT_FIELDS_TAB          Campos con los que se puede construir
*      -->P_LT_FIELDS_TAB_EXCLUDE  Campos inicialmente desactivados
*      -->P_SELECTION_ID           ID de la selección
*      -->P_TIPO               P=Popup, C=Pantalla Completa, S=Subscreen
*----------------------------------------------------------------------*
  FORM selscn_rango_dinamico
                  TABLES p_lt_where                   TYPE rsds_twhere
                         p_lt_fields_tab    STRUCTURE gd_selscn_fields
                         p_lt_fields_exc    STRUCTURE gd_selscn_fields
                   USING p_selection_id          LIKE gd_selection_id
                         p_tipo.

    DATA lt_fields_tab LIKE p_lt_fields_tab OCCURS 0 WITH HEADER LINE.
    DATA  lt_fields_exc LIKE p_lt_fields_exc OCCURS 0 WITH HEADER LINE.
    DATA lt_tables_tab LIKE rsdstabs OCCURS 0 WITH HEADER LINE.
    DATA lt_expressions TYPE rsds_texpr.
*    DATA lw_expressions LIKE LINE OF lt_expressions.
    DATA lt_where_clauses TYPE rsds_twhere.
    DATA lw_where_clauses  LIKE LINE OF lt_where_clauses .
    DATA lt_field_ranges TYPE rsds_trange.
    DATA l_number_of_active_fields TYPE i.
    DATA lv_error(30)   TYPE c.
    DATA l_pfkey LIKE  rsdspfkey.
    DATA l_popup.
    DATA l_subscreen.

    CASE p_tipo.
      WHEN 'P'.
        l_popup = 'X'.
      WHEN 'S'.
        l_subscreen = 'X'.
      WHEN 'C'.

      WHEN OTHERS.

        MESSAGE e666(01) WITH 'Debe indicar un valor a p_tipo:'
                              'P=Popup,'
                              'C=Pantalla completa'
                              'o S=Subscreen.'.
    ENDCASE.

* Se elige un status sencillo
    l_pfkey-pfkey = '%_FS_P_O'.
    l_pfkey-program = 'RSSYSTDB'.

* Se rellenan las tablas
    LOOP AT p_lt_fields_tab.
      lt_tables_tab-prim_tab = p_lt_fields_tab-tablename.
      COLLECT lt_tables_tab.
    ENDLOOP.


    IF p_selection_id IS INITIAL.
      CALL FUNCTION 'FREE_SELECTIONS_INIT'
       EXPORTING
         kind                           = 'F'
         expressions                    = lt_expressions
*        FIELD_GROUPS_KEY               =
*        RESTRICTION                    =
*        ALV                            =
*        CURR_QUAN_PROG                 = SY-CPROG
*        CURR_QUAN_RELATION             =
       IMPORTING
         selection_id                   = p_selection_id
*        WHERE_CLAUSES                  =
         expressions                    = lt_expressions
*        field_ranges                   =
*        NUMBER_OF_ACTIVE_FIELDS        =
       TABLES
         tables_tab                     = lt_tables_tab
         fields_tab                     = p_lt_fields_tab
*        FIELD_DESC                     =
*        FIELD_TEXTS                    =
*        EVENTS                         =
*        EVENT_FIELDS                   =
         fields_not_selected            = p_lt_fields_exc
*        ALV_QINFO                      =
       EXCEPTIONS
         fields_incomplete              = 1
         fields_no_join                 = 2
         field_not_found                = 3
         no_tables                      = 4
         table_not_found                = 5
         expression_not_supported       = 6
         incorrect_expression           = 7
         illegal_kind                   = 8
         area_not_found                 = 9
         inconsistent_area              = 10
         kind_f_no_fields_left          = 11
         kind_f_no_fields               = 12
         too_many_fields                = 13
         dup_field                      = 14
         field_no_type                  = 15
         field_ill_type                 = 16
         dup_event_field                = 17
         node_not_in_ldb                = 18
         area_no_field                  = 19
         OTHERS                         = 20
                .
      CASE sy-subrc.
        WHEN 1.
          lv_error = 'FIELDS_INCOMPLETE'.
        WHEN 2.
          lv_error = 'FIELDS_NO_JOIN'.
        WHEN 3.
          lv_error = 'FIELD_NOT_FOUND'.
        WHEN 4.
          lv_error = 'NO_TABLES'.
        WHEN 5.
          lv_error = 'TABLE_NOT_FOUND'.
        WHEN 6.
          lv_error = 'EXPRESSION_NOT_SUPPORTED'.
        WHEN 7.
          lv_error = 'INCORRECT_EXPRESSION'.
        WHEN 8.
          lv_error = 'ILLEGAL_KIND'.
        WHEN 9.
          lv_error = 'AREA_NOT_FOUND'.
        WHEN 10.
          lv_error = 'INCONSISTENT_AREA'.
        WHEN 11.
          lv_error = 'KIND_F_NO_FIELDS_LEFT'.
        WHEN 12.
          lv_error = 'KIND_F_NO_FIELDS'.
        WHEN 13.
          lv_error = 'TOO_MANY_FIELDS'.
        WHEN 14.
          lv_error = 'DUP_FIELD'.
        WHEN 15.
          lv_error = 'FIELD_NO_TYPE'.
        WHEN 16.
          lv_error = 'FIELD_ILL_TYPE'.
        WHEN 17.
          lv_error = 'DUP_EVENT_FIELD'.
        WHEN 18.
          lv_error = 'NODE_NOT_IN_LDB'.
        WHEN 19.
          lv_error = 'AREA_NO_FIELD'.
        WHEN 20.
          lv_error = 'OTHERS'.
      ENDCASE.
      IF NOT sy-subrc IS INITIAL.
        MESSAGE e437(r1) WITH 'FREE_SELECTIONS_INIT' lv_error.
      ENDIF.

    ENDIF.

    lt_fields_tab[] = p_lt_fields_tab[].
    lt_fields_exc[] = p_lt_fields_exc[].

    IF NOT p_selection_id IS INITIAL.
      CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
        EXPORTING
          selection_id                  = p_selection_id
          title                         = sy-title
*         FRAME_TEXT                    = ' '
*         status                        = 1
          as_window                     = l_popup
*         START_ROW                     = 2
*         START_COL                     = 2
*         NO_INTERVALS                  = ' '
*         JUST_DISPLAY                  = ' '
          pfkey                         = l_pfkey
*         alv                           = ' '
*         tree_visible                  = 'X'
*         DIAG_TEXT_1                   =
*         DIAG_TEXT_2                   =
*         WARNING_TITLE                 =
          as_subscreen                  = l_subscreen
*         NO_FRAME                      =
        IMPORTING
          where_clauses                 = lt_where_clauses
          expressions                   = lt_expressions
          field_ranges                  = lt_field_ranges
          number_of_active_fields       = l_number_of_active_fields
        TABLES
          fields_tab                    = p_lt_fields_tab
*         FCODE_TAB                     =
          fields_not_selected           = p_lt_fields_exc
        EXCEPTIONS
          internal_error                = 1
          no_action                     = 2
          selid_not_found               = 3
          illegal_status                = 4
          OTHERS                        = 5
                .


      CASE sy-subrc.
        WHEN 1.
          lv_error = 'INTERNAL_ERROR'.
        WHEN 2.
          lv_error = 'NO_ACTION'.
          sy-subrc = 1.
          EXIT.
        WHEN 3.
          lv_error = 'SELID_NOT_FOUND'.
        WHEN 4.
          lv_error = 'ILLEGAL_STATUS'.
      ENDCASE.
      IF NOT sy-subrc IS INITIAL.
        MESSAGE e437(r1) WITH 'FREE_SELECTIONS_DIALOG' lv_error.
      ENDIF.

    ENDIF.

    REFRESH p_lt_fields_exc.

    LOOP AT lt_fields_tab INTO p_lt_fields_exc.
      READ TABLE p_lt_fields_tab
             WITH KEY tablename = p_lt_fields_exc-tablename
                      fieldname = p_lt_fields_exc-fieldname.
      IF NOT sy-subrc IS INITIAL.
        APPEND p_lt_fields_exc.
      ENDIF.
    ENDLOOP.

    p_lt_fields_tab[] = lt_fields_tab[].

    p_lt_where[] = lt_where_clauses[].

  ENDFORM.                    " selscn_rango_dinamico


*&---------------------------------------------------------------------*
*&      Form  selscn_rango_dinamico_tabla
*&---------------------------------------------------------------------*
*       Programa donde aprender más: BUQAUSWERT_GEN
*       Este form genera una pantalla de selección de forma dinámica
*       a partir de los campos que se le indica en la tabla
*       p_lt_fields_tab rellenando posteriormente la tabla P_LT_WHERE
*       de modo que se puede llegar a construir a partir de ella un
*       select de manera dinámica.
*----------------------------------------------------------------------*
*      -->P_LT_WHERE               Tabla salida para select
*      -->P_LT_FIELDS_TAB          Campos con los que se puede construir
*      -->P_LT_FIELDS_TAB_EXCLUDE  Campos inicialmente desactivados
*      -->P_SELECTION_ID           ID de la selección
*      -->P_TIPO               P=Popup, C=Pantalla Completa, S=Subscreen
*----------------------------------------------------------------------*
  FORM selscn_rango_dinamico_tabla
                  TABLES p_lt_where                   TYPE rsds_twhere
                         p_lt_fields_tab    STRUCTURE gd_selscn_fields
                         p_lt_fields_exc    STRUCTURE gd_selscn_fields
                   USING p_selection_id          LIKE gd_selection_id
                         p_tipo.

    DATA lt_tables_tab LIKE rsdstabs OCCURS 0 WITH HEADER LINE.
    DATA lt_expressions TYPE rsds_texpr.
*    DATA lw_expressions LIKE LINE OF lt_expressions.
    DATA lt_where_clauses TYPE rsds_twhere.
    DATA lw_where_clauses  LIKE LINE OF lt_where_clauses .
    DATA lt_field_ranges TYPE rsds_trange.
    DATA l_number_of_active_fields TYPE i.
    DATA lv_error(30)   TYPE c.
    DATA l_pfkey LIKE  rsdspfkey.
    DATA l_popup.
    DATA l_subscreen.

    CASE p_tipo.
      WHEN 'P'.
        l_popup = 'X'.
      WHEN 'S'.
        l_subscreen = 'X'.
      WHEN 'C'.

      WHEN OTHERS.

        MESSAGE e666(01) WITH 'Debe indicar un valor a p_tipo:'
                              'P=Popup,'
                              'C=Pantalla completa'
                              'o S=Subscreen.'.
    ENDCASE.

* Se elige un status sencillo
    l_pfkey-pfkey = '%_FS_P_O'.
    l_pfkey-program = 'RSSYSTDB'.

* Se rellenan las tablas
    LOOP AT p_lt_fields_tab.
      lt_tables_tab-prim_tab = p_lt_fields_tab-tablename.
      COLLECT lt_tables_tab.
    ENDLOOP.


    IF p_selection_id IS INITIAL.
      CALL FUNCTION 'FREE_SELECTIONS_INIT'
       EXPORTING
         kind                           = 'T'
         expressions                    = lt_expressions
*        FIELD_GROUPS_KEY               =
*        RESTRICTION                    =
*        ALV                            =
*        CURR_QUAN_PROG                 = SY-CPROG
*        CURR_QUAN_RELATION             =
       IMPORTING
         selection_id                   = p_selection_id
*        WHERE_CLAUSES                  =
         expressions                    = lt_expressions
*        field_ranges                   =
*        NUMBER_OF_ACTIVE_FIELDS        =
       TABLES
         tables_tab                     = lt_tables_tab
         fields_tab                     = p_lt_fields_tab
*        FIELD_DESC                     =
*        FIELD_TEXTS                    =
*        EVENTS                         =
*        EVENT_FIELDS                   =
         fields_not_selected            = p_lt_fields_exc
*        ALV_QINFO                      =
       EXCEPTIONS
         fields_incomplete              = 1
         fields_no_join                 = 2
         field_not_found                = 3
         no_tables                      = 4
         table_not_found                = 5
         expression_not_supported       = 6
         incorrect_expression           = 7
         illegal_kind                   = 8
         area_not_found                 = 9
         inconsistent_area              = 10
         kind_f_no_fields_left          = 11
         kind_f_no_fields               = 12
         too_many_fields                = 13
         dup_field                      = 14
         field_no_type                  = 15
         field_ill_type                 = 16
         dup_event_field                = 17
         node_not_in_ldb                = 18
         area_no_field                  = 19
         OTHERS                         = 20
                .
      CASE sy-subrc.
        WHEN 1.
          lv_error = 'FIELDS_INCOMPLETE'.
        WHEN 2.
          lv_error = 'FIELDS_NO_JOIN'.
        WHEN 3.
          lv_error = 'FIELD_NOT_FOUND'.
        WHEN 4.
          lv_error = 'NO_TABLES'.
        WHEN 5.
          lv_error = 'TABLE_NOT_FOUND'.
        WHEN 6.
          lv_error = 'EXPRESSION_NOT_SUPPORTED'.
        WHEN 7.
          lv_error = 'INCORRECT_EXPRESSION'.
        WHEN 8.
          lv_error = 'ILLEGAL_KIND'.
        WHEN 9.
          lv_error = 'AREA_NOT_FOUND'.
        WHEN 10.
          lv_error = 'INCONSISTENT_AREA'.
        WHEN 11.
          lv_error = 'KIND_F_NO_FIELDS_LEFT'.
        WHEN 12.
          lv_error = 'KIND_F_NO_FIELDS'.
        WHEN 13.
          lv_error = 'TOO_MANY_FIELDS'.
        WHEN 14.
          lv_error = 'DUP_FIELD'.
        WHEN 15.
          lv_error = 'FIELD_NO_TYPE'.
        WHEN 16.
          lv_error = 'FIELD_ILL_TYPE'.
        WHEN 17.
          lv_error = 'DUP_EVENT_FIELD'.
        WHEN 18.
          lv_error = 'NODE_NOT_IN_LDB'.
        WHEN 19.
          lv_error = 'AREA_NO_FIELD'.
        WHEN 20.
          lv_error = 'OTHERS'.
      ENDCASE.
      IF NOT sy-subrc IS INITIAL.
        MESSAGE e437(r1) WITH 'FREE_SELECTIONS_INIT' lv_error.
      ENDIF.

    ENDIF.

    IF NOT p_selection_id IS INITIAL.
      CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
        EXPORTING
          selection_id                  = p_selection_id
          title                         = sy-title
*         FRAME_TEXT                    = ' '
*         status                        = 1
          as_window                     = l_popup
*         START_ROW                     = 2
*         START_COL                     = 2
*         NO_INTERVALS                  = ' '
*         JUST_DISPLAY                  = ' '
          pfkey                         = l_pfkey
*         alv                           = ' '
*         tree_visible                  = 'X'
*         DIAG_TEXT_1                   =
*         DIAG_TEXT_2                   =
*         WARNING_TITLE                 =
          as_subscreen                  = l_subscreen
*         NO_FRAME                      =
        IMPORTING
          where_clauses                 = lt_where_clauses
          expressions                   = lt_expressions
          field_ranges                  = lt_field_ranges
          number_of_active_fields       = l_number_of_active_fields
        TABLES
          fields_tab                    = p_lt_fields_tab
*         FCODE_TAB                     =
          fields_not_selected           = p_lt_fields_exc
        EXCEPTIONS
          internal_error                = 1
          no_action                     = 2
          selid_not_found               = 3
          illegal_status                = 4
          OTHERS                        = 5
                .

      CASE sy-subrc.
        WHEN 1.
          lv_error = 'INTERNAL_ERROR'.
        WHEN 2.
          lv_error = 'NO_ACTION'.
          sy-subrc = 1.
          EXIT.
        WHEN 3.
          lv_error = 'SELID_NOT_FOUND'.
        WHEN 4.
          lv_error = 'ILLEGAL_STATUS'.
      ENDCASE.
      IF NOT sy-subrc IS INITIAL.
        MESSAGE e437(r1) WITH 'FREE_SELECTIONS_DIALOG' lv_error.
      ENDIF.

    ENDIF.

    p_lt_where[] = lt_where_clauses[].

  ENDFORM.                    " selscn_rango_dinamico_Tabla

66
Programación ABAP / Re: instalar minisap
« en: 30 de Abril de 2008, 04:16:41 pm »
Respecto al error no se lo que es, pero tengo entendido que en el xp el sapgui no funciona bien, es mejor instalarlo en un nt o win2000.


67
Programación ABAP / Re: Mi primer Job (ayuda por favor)
« en: 17 de Abril de 2008, 03:44:14 pm »
Yo utilizaría la funcion para llamar comandos del sistema operativo definidos en la SM69, que es SXPG_CALL_SYSTEM.

Por otro lado creo que que en fondo no se puede ejecutar  la función WS_EXECUTE.

Un saludo,

68
Se me ocurre una cosa.

Igual puedes hacer un programa que llame a la función WS_EXECUTE

Esta función nos permite ejecutar cualquier programa instalado en nuestro ordenador.

Y luego intenta hacer el Job al programa.

Un saludo.

69
Programación ABAP / Re: Anexar PDF en RM
« en: 20 de Febrero de 2008, 01:29:46 pm »
Encontré este enlace, no se si te servirá.  ???

http://abap.wikiprog.com/wiki/BAPI_RECORD_ADDELEMENTS

Un saludo

70
Programación ABAP / Re: No puedo activar Tabla del Diccionario del datos
« en: 19 de Febrero de 2008, 04:30:22 pm »
Hola.

Creo que lo que lo que te pasa es que te faltan por meter las opciones técnicas.

Si te fijas hay un Botón de "Opciones Técnicas", ahí tienes que rellenar los campo obligatorios que tienes.

Por ejemplo:
Clase de datos     APPL0
Categ.tamaño       0 
   


Un saludo.

71
Programación ABAP / Valor Absoluto
« en: 06 de Febrero de 2008, 01:25:52 pm »
Como se calculaba el valor absoluto

No me acuerdo que instrucción era.  :P

Gracias.

72
Basis / Re: Perfiles Usuarios SAP
« en: 04 de Febrero de 2008, 10:24:10 am »
No controlo del tema, y manuales no tengo pero igual te ayuda este link un poco.

http://help.sap.com/bp_blv1600/BL_ES/html/author_concept_ES_ES.htm


73
Programación ABAP / Función de fechas
« en: 29 de Enero de 2008, 03:00:29 pm »
Hola a todos,

¿Hay alguna función para restar meses a una fecha?




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