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

Páginas: 1 ... 6 7 [8]
106
Funciones / Recuperar datos de Empleados
« en: 12 de Julio de 2007, 10:23:19 am »
Para recuperar los datos de Empleados vamos a utilizar dos funciones:

Por un lado: SUSR_USER_ADDRESS_READ

Y por otro: ADDR_PERS_COMP_COMM_GET

Código: [Seleccionar]

  DATA: ld_address LIKE  addr3_val,
        ld_usr03   LIKE  usr03,
        ld_userid  type sy-uname,
        ld_smtp LIKE adsmtp OCCURS 0 WITH HEADER LINE.

  ld_userid = sy-uname.

  CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
    EXPORTING
      user_name                    = ld_userid
*   READ_DB_DIRECTLY             = ' '
    IMPORTING
      user_address                 = ld_address
      user_usr03                   = ld_usr03
    EXCEPTIONS
      user_address_not_found       = 1
      OTHERS                       = 2.


* Get additional user address details (i.e. email)
  CALL FUNCTION 'ADDR_PERS_COMP_COMM_GET'
    EXPORTING
*     ADDRESS_HANDLE          = ' '
     ADDRESS_NUMBER          = ld_address-addrnumber
*     DATE_FROM               = '00010101'
*     LANGUAGE                = SY-LANGU
*     PERSON_HANDLE           = ' '
     PERSON_NUMBER           = ld_address-persnumber
      table_type              = 'ADSMTP'   "email details
*                   Other valid entries for table_type include:
*                       ADFAX for fax details 
*                       ADTEL for telephone details 
*   IMPORTING
*     RETURNCODE              =
    tables
      comm_table              =  ld_smtp
*     ERROR_TABLE             =
   EXCEPTIONS
     PARAMETER_ERROR         = 1
     ADDRESS_NOT_EXIST       = 2
     PERSON_NOT_EXIST        = 3
     INTERNAL_ERROR          = 4
     OTHERS                  = 5.


107
Reports / Pantalla de Selección Dinámico
« en: 12 de Julio de 2007, 09:25:58 am »
Este es un ejemplo de una pantalla de Seleción Dinámica.

Simplemente hay que pinchar en los RADIOBUTTON y ver que pasa.

Código: [Seleccionar]
*&---------------------------------------------------------------------*
*& Report  ZPANTALLA_DINAMICA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

  REPORT  zpantalla_dinamica.
  TABLES: trdir.

  SELECTION-SCREEN BEGIN OF BLOCK uno WITH FRAME TITLE text-001.
  PARAMETERS: r_opt01 RADIOBUTTON GROUP rad1,
              r_opt02 RADIOBUTTON GROUP rad1,
              r_opt03 RADIOBUTTON GROUP rad1,
              r_opt04 RADIOBUTTON GROUP rad1.

  SELECTION-SCREEN SKIP.

  PARAMETERS: p_opt01 RADIOBUTTON GROUP rad2 USER-COMMAND aaa,
              p_opt02 RADIOBUTTON GROUP rad2,
              p_opt03 RADIOBUTTON GROUP rad2,
              p_opt04 RADIOBUTTON GROUP rad2.
  SELECTION-SCREEN END OF BLOCK uno.

  SELECTION-SCREEN BEGIN OF BLOCK dos WITH FRAME TITLE text-002.
  SELECT-OPTIONS: s_opt1 FOR trdir-cnam,
                  s_opt22 FOR trdir-cnam,
                  s_opt333 FOR trdir-cnam,
                  s_opt444 FOR trdir-cnam.
  SELECTION-SCREEN END OF BLOCK dos.




  AT SELECTION-SCREEN OUTPUT.

    LOOP AT SCREEN.
*---- Opción 1
      IF r_opt01 = 'X'.
        IF screen-name CS 'S_OPT1'.
          screen-invisible = '0'.
          screen-input = '1'.
        ELSEIF screen-name CS 'S_OPT22' OR
               screen-name CS 'S_OPT333' OR
               screen-name CS 'S_OPT444' .
          screen-invisible = '1'.
          screen-input = '0'.
        ENDIF.

*---- Opción 2
      ELSEIF p_opt02 = 'X'.
        IF screen-name CS 'S_OPT22'.
          screen-invisible = '0'.
          screen-input = '1'.
        ELSEIF screen-name CS 'S_OPT1' OR
               screen-name CS 'S_OPT333' OR
               screen-name CS 'S_OPT444' .
          screen-invisible = '1'.
          screen-input = '0'.
        ENDIF.

*---- Opción 3
      ELSEIF p_opt03 = 'X'.
        IF screen-name CS 'S_OPT333'.
          screen-invisible = '0'.
          screen-input = '1'.
        ELSEIF screen-name CS 'S_OPT1' OR
               screen-name CS 'S_OPT22' OR
               screen-name CS 'S_OPT444' .
          screen-invisible = '1'.
          screen-input = '0'.
        ENDIF.

*---- Opción 4
      ELSEIF p_opt04 = 'X'.
        IF screen-name CS 'S_OPT444'.
          screen-invisible = '0'.
          screen-input = '1'.
        ELSEIF screen-name CS 'S_OPT1' OR
               screen-name CS 'S_OPT22' OR
               screen-name CS 'S_OPT333' .
          screen-invisible = '1'.
          screen-input = '0'.
        ENDIF.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.


108
Reports / Mandar mensajes POPUP entre Usuarios
« en: 11 de Julio de 2007, 10:16:01 pm »
Con este report, muestras un mensaje POPUP a varios usuarios.




*&---------------------------------------------------------------------*
*& Report  Z_MSN_POPUP                                                 *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT Z_MSN_POPUP NO STANDARD PAGE HEADING LINE-SIZE 255.

TABLES: USR41, SPOPLI.

DATA: l_length   TYPE i,
      USER_TEXT  LIKE AGR_TEXTS-TEXT,
      TERMINAL   LIKE USR41-TERMINAL,
      RESPUESTA(2),
      IP(15),
      PC(16).

DATA: ITAB LIKE SPOPLI OCCURS 0 WITH HEADER LINE.
DATA: NOMBRE LIKE SY-UNAME.
DATA: FLAG(1).


PARAMETERS: l_msg  LIKE sm04dic-popupmsg default 'Escribir texto'.



*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*

  PERFORM TOMAR_DATOS_DESTINATARIOS.
  PERFORM TOMAR_DECISION.

  CHECK RESPUESTA NE 'A'.

  TRANSLATE L_MSG USING '= '.
  l_length = strlen( l_msg ).

  LOOP AT ITAB WHERE SELFLAG = 'X'.
    PERFORM TH_POPUP.
  ENDLOOP.







************************************************************************
*                           SUBRUTINAS                                 *
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  TOMAR_DATOS_DESTINATARIOS
*&---------------------------------------------------------------------*
FORM TOMAR_DATOS_DESTINATARIOS.

  SELECT * FROM  USR41 INTO USR41.

    CONCATENATE PC ',' ITAB-VAROPTION INTO ITAB-VAROPTION.

    MOVE USR41-BNAME TO ITAB-VAROPTION.
    ITAB-SELFLAG = ' '.
    APPEND ITAB.
    CLEAR ITAB.

  ENDSELECT.

ENDFORM.                    "TOMAR_DATOS_DESTINATARIOS

*&---------------------------------------------------------------------*
*&      Form  TOMAR_DECISION
*&---------------------------------------------------------------------*
FORM TOMAR_DECISION.
  DATA: RESTO.

  CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
    EXPORTING
      MARK_FLAG          = 'X'
      MARK_MAX           = 10
      TEXTLINE1    =
      'MARCA A LOS USUARIOS QUE QUIERAS ENVIAR EL MENSAJE'
      TITEL              = 'DESTINATARIOS'
    IMPORTING
      ANSWER             = RESPUESTA
    TABLES
      T_SPOPLI           = ITAB
    EXCEPTIONS
      NOT_ENOUGH_ANSWERS = 1
      TOO_MUCH_ANSWERS   = 2
      TOO_MUCH_MARKS     = 3
      OTHERS             = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  LOOP AT ITAB WHERE SELFLAG = 'X'.
    IF FLAG = ' '.
      FLAG = 'X'.
      WRITE: 3 'Usuarios que han recibido el mensaje:'.
      WRITE: 41 ITAB-VAROPTION.
    ELSE.
      WRITE: /41 ITAB-VAROPTION.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "TOMAR_DECISION
*&---------------------------------------------------------------------*
*&      Form  TH_POPUP
*&---------------------------------------------------------------------*
FORM TH_POPUP .
  CLEAR NOMBRE.

  MOVE ITAB-VAROPTION TO NOMBRE.
  CALL FUNCTION 'TH_POPUP'
               EXPORTING
                    client         = sy-mandt
                    user           = NOMBRE
                    MESSAGE        = l_msg
                    message_len    = l_length
*                     CUT_BLANKS     = ' '
               EXCEPTIONS
                    user_not_found = 1
                    OTHERS         = 2.

ENDFORM.                    " TH_POPUP



Si lo ejecutamos nos saldrá la siguiente pantalla y escribimos el texto que queremos enviar.





Luego nos saldrá esta otra pantalla en la que tenemos que elegir a los usuarios que queremos enviar el anterior mensaje...



Y listo..  ;D

109
Programación ABAP / Re: Campos de Table Control en Visualizar
« en: 11 de Julio de 2007, 10:56:12 am »
Hola,


Hay que hacer un loop al table control. Prueba con esto.


DATA col TYPE cxtab_column.
 CLEAR col.

 LOOP AT tc_fact-cols INTO col.
   col-screen-input       = 0.
   MODIFY tc_fact-cols INDEX sy-tabix FROM col.
 ENDLOOP.



Donde tc_fact es el nombre del table control.

Un saludo...

110
Programación ABAP / Nuevo foro de abap.es
« en: 10 de Julio de 2007, 09:11:08 pm »
Empezamos con un nuevo foro.

Espero que sea de ayuda para todos incluido yo.

Durante los primeros días estaré haciendo pruebas y algunos cambios, espero que todo vaya bien y no de problemas.



Un saludo,
Oscar.  ::)

111
Bapis / BAPI_PO_CREATE1
« en: 09 de Julio de 2007, 06:42:33 pm »
Con esta BAPI vamos a crearnos un pedido de Compras...


Primero rellenamos la Cabecera de la BAPI.
Código: [Seleccionar]
FORM rellenar_bapi_cab.

  CLEAR l_poheader.
  CLEAR l_poheaderx.

  l_poheader-comp_code    = ekko-bukrs.
  l_poheader-doc_type     = 'NB'.
  l_poheader-creat_date   = sy-datlo.
  l_poheader-created_by   = sy-uname.
  l_poheader-vendor       = ekko-lifnr.
  l_poheader-purch_org    = ekko-ekorg.
  l_poheader-pur_group    = ekko-ekgrp.
  l_poheader-doc_date     = sy-datum.


  l_poheaderx-comp_code   = 'X'.
  l_poheaderx-doc_type    = 'X'.
  l_poheaderx-creat_date  = 'X'.
  l_poheaderx-created_by  = 'X'.
  l_poheaderx-vendor      = 'X'.
  l_poheaderx-purch_org   = 'X'.
  l_poheaderx-pur_group   = 'X'.
  l_poheaderx-doc_date    = 'X'.

ENDFORM.                    " rellenar_bapi_cab

Ahora rellenamos las posiciones
Código: [Seleccionar]
FORM rellenar_bapi_pos.

  DATA: pos_rep LIKE ekpo-ebelp.

* Coger nombre material.
  SELECT SINGLE * FROM makt WHERE matnr = i_pedido-matnr
                              AND spras = sy-langu.
  SELECT SINGLE * FROM mara WHERE matnr = i_pedido-matnr.


  CLEAR pos_rep.
  LOOP AT i_pedido.
    CLEAR: l_t_poitem, l_t_poitemx, l_t_poschedule, l_t_poschedulex.
    ADD 10 TO pos_rep.

    l_t_poitem-po_item                  = pos_rep.
    l_t_poitem-short_text               = makt-maktx.
    l_t_poitem-material                 = i_pedido-matnr.
    l_t_poitem-plant                    = ekpo-werks.
    l_t_poitem-stge_loc                 = ekpo-lgort.
    l_t_poitem-quantity                 = i_pedido-menge.
    l_t_poitem-po_unit                  = mara-meins.
    l_t_poitem-item_cat                 = '2'.
    l_t_poitem-agreement                = i_pedido-konnr.
    l_t_poitem-agmt_item                = i_pedido-ktpnr.
    APPEND l_t_poitem.

    l_t_poitemx-po_item                 = pos_rep.
    l_t_poitemx-po_itemx                = 'X'.
    l_t_poitemx-short_text              = 'X'.
    l_t_poitemx-material                = 'X'.
    l_t_poitemx-plant                   = 'X'.
    l_t_poitemx-stge_loc                = 'X'.
    l_t_poitemx-quantity                = 'X'.
    l_t_poitemx-po_unit                 = 'X'.
    l_t_poitemx-item_cat                = 'X'.
    IF NOT i_pedido-konnr IS INITIAL.
      l_t_poitemx-agreement             = 'X'.
      l_t_poitemx-agmt_item             = 'X'.
    ENDIF.
    APPEND l_t_poitemx.

    l_t_poschedule-po_item        = pos_rep.
    l_t_poschedule-delivery_date  = i_pedido-eeind.
    l_t_poschedule-quantity       = i_pedido-menge.
    l_t_poschedule-deliv_time     = sy-uzeit.
    APPEND l_t_poschedule.

    l_t_poschedulex-po_item         = pos_rep.
    l_t_poschedulex-po_itemx        = 'X'.
    l_t_poschedulex-delivery_date   = 'X'.
    l_t_poschedulex-quantity        = 'X'.
    l_t_poschedulex-deliv_time      = 'X'.
    APPEND l_t_poschedulex.

ENDFORM.                    " rellenar_bapi_pos

Ejecutamos la BAPI.
Código: [Seleccionar]
FORM crear_pedido_compra .

  CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
      poheader         = l_poheader
      poheaderx        = l_poheaderx
    IMPORTING
      exppurchaseorder = d_ebeln
    TABLES
      return           = l_t_return
      poitem           = l_t_poitem
      poitemx          = l_t_poitemx
      poschedule       = l_t_poschedule
      poschedulex      = l_t_poschedulex.


  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDFORM.                    " crear_pedido_compra

112
Includes / INCLUDE para Batch Input
« en: 09 de Julio de 2007, 06:37:23 pm »
Este Include esta formado por los siguientes FORM:

  - abrir_sesion_BI
  - rellenar_dynpro
  - insertar_transaccion_BI
  - cerrar_sesion_BI


Código: [Seleccionar]

*-----------------------------------------------------------------------
*                    FORM abrir_sesion_BI
*-----------------------------------------------------------------------
* Esta función abre la sesión de batch input. Si la sesión de batch
*input se ha ejecutado incorrectamente avisa al programa principal.
*-----------------------------------------------------------------------
* --> i_bdctab : Tabla de tipo bdcdata donde se almacena el contenido
*                 del batch input.
* --> p_sesion: Nombre de la sesión de batch input.
* --> p_fechin: Fecha a partir de la cual se puede procesar el b. input.
*     por ejemplo: '19980603' equivale a bloquear hasta el 03/06/1998.
* <-- p_return: Devuelve un valor (sy_subrc) tal que notifica si la
*     función se ha ejecutado correctamente (caso de valer 0).
*-----------------------------------------------------------------------
FORM ABRIR_SESION_BI USING P_SESION TYPE C P_FECHIN TYPE D CHANGING
                            VALUE(P_RETURN) TYPE I.

  DATA: D_BATCHIN TYPE I.
  CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
            CLIENT              = SY-MANDT
            GROUP               = P_SESION
            USER                = SY-UNAME
            HOLDDATE            = P_FECHIN
            KEEP                = 'X'
       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.
     D_BATCHIN = 1.
  ENDIF.
  P_RETURN = SY-SUBRC.

ENDFORM.

*----------------------------------------------------------------------
*                          FORM rellenar_dynpro
*----------------------------------------------------------------------
*Esta función pretende facilitar la tarea del programador para rellenar
*los campos de la tabla interna de tipo BDCDATA.
*-----------------------------------------------------------------------
* --> i_bdctab: Tabla de tipo bdcdata donde se almecena el contenido del
*              batch input.
* --> p_valor1: Corresponderá la valor del campo Start de la tabla
*     interna. Puede tomar los siguientes valores 'X' o ' '.
* --> p_valor2: Puede indicar dos conceptos distintos dependiendo del
*     valor que haya tomado p_valor1:
*         p_valor1 ='X' => p_valor2 = Campo program de la tabla BDC_TAB
*         p_valor1 =' ' => p_valor2 = campo Field name de BDC_TAB
* --> p_valor3: Puede inidicar dos valores distintos dependiendo del
*     valor que haya tomado p_valor1:
*         p_valor1 ='X' => p_valor3 = Screen de la tabla BDC_TAB
*         p_valor1 =' ' => p_valor3 = Field Value de la tabla BDC_TAB
*-----------------------------------------------------------------------
FORM RELLENAR_DYNPRO TABLES I_BDCTAB STRUCTURE BDCDATA USING P_VALOR1
            TYPE C P_VALOR2 TYPE C P_VALOR3 TYPE C.

  CLEAR I_BDCTAB.
  IF P_VALOR1 EQ 'X'.
    MOVE: P_VALOR2 TO I_BDCTAB-PROGRAM,
          P_VALOR3 TO I_BDCTAB-DYNPRO,
          P_VALOR1 TO I_BDCTAB-DYNBEGIN.
  ELSE.
    MOVE: P_VALOR2 TO I_BDCTAB-FNAM,
          P_VALOR3 TO I_BDCTAB-FVAL.
  ENDIF.
  APPEND I_BDCTAB.

ENDFORM.

*-----------------------------------------------------------------------
*                      FORM insertar_transacción_BI
*-----------------------------------------------------------------------
* Esta función transfiere los datos de la tabla BDC_TAB al fichero de
* cola, para poder ser más tarde procesado.
*-----------------------------------------------------------------------
* --> i_bdctab: Tabla de tipo bdcdata donde se almacena el contenido del
*              batch input.
* --> p_codigo: Indicar el código de transacción para el que se ha gene-
*     rado la sesión de batch input.
* <-- p_return: Devuelve el valor de sy-subrc.
*-----------------------------------------------------------------------
FORM INSERTAR_TRANSACCION_BI TABLES I_BDCTAB STRUCTURE BDCDATA USING
                    P_CODIGO TYPE C CHANGING VALUE(P_RETURN) TYPE I.

  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            TCODE     = P_CODIGO
       TABLES
            DYNPROTAB = I_BDCTAB
       EXCEPTIONS
            INTERNAL_ERROR   = 1
            NOT_OPEN         = 2
            QUEUE_ERROR      = 3
            TCODE_INVALID    = 4
            PRINTING_INVALID = 5
            POSTING_INVALID  = 6
            OTHERS           = 7.

  P_RETURN = SY-SUBRC.
  REFRESH I_BDCTAB.

ENDFORM.

*-----------------------------------------------------------------------
*                         FORM cerrar_sesion_BI
*-----------------------------------------------------------------------
* Cierra la sesión de batch input.
*-----------------------------------------------------------------------
* --> i_bdctab: Tabla de tipo bdcdata donde se almacena el contenido del
*               batch input.
* <--p_return: Devuelve el parámetro sy-subrc.
*----------------------------------------------------------------------
FORM CERRAR_SESION_BI TABLES I_BDCTAB STRUCTURE BDCDATA USING
                      P_RETURN TYPE I.
  CALL FUNCTION 'BDC_CLOSE_GROUP'
       EXCEPTIONS
            NOT_OPEN    = 1
            QUEUE_ERROR = 2
            OTHERS      = 3.

  P_RETURN = SY-SUBRC.
  FREE I_BDCTAB.

ENDFORM.


Páginas: 1 ... 6 7 [8]