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 2 [3] 4 5 ... 8
31
Programación ABAP / Re: Bapi BAPI_INSPOPER_RECORDRESULTS
« en: 03 de Noviembre de 2008, 04:53:04 pm »
Cuando no se que campos hay que rellenar suelo mirar otras Bapis para cerciorarme que campos hay que utilizar.
En tu caso te serviría esta BAPI: BAPI_INSPOPER_GETDETAIL

Respecto a lo que estas comentando creo que lo que te puede faltar es rellenar en la tabla SINGLE_RESULTS el campo... RES_VALUE.



Un saludo.

32
Programación ABAP / Re: Query con BD Lógica AFI
« en: 07 de Octubre de 2008, 06:11:48 pm »
Muchas gracias por la respuesta Vande, seguro que nos será útil.

 ;)

33
Programación ABAP / Re: Declarar una variable en Local como Global
« en: 03 de Octubre de 2008, 10:53:09 am »
Se hace con la sentencia STATICS.


Este es un ejemplo que viene en SAP...
Código: [Seleccionar]
DO 5 TIMES.
  PERFORM add_one.
ENDDO.

FORM add_one.
  DATA    local  TYPE i VALUE 10.
  STATICS static TYPE i VALUE 10.

  local  = local  + 1.
  static = static + 1.
  WRITE: / local, static.
ENDFORM.

Saludos.

34
Programación ABAP / Re: Pantalla de Selección
« en: 21 de Agosto de 2008, 12:09:32 pm »
Se me ocurre que puede ser una cosa.

Vete a los Atributos del Report.

Abajo tienes un botón que pone ¿Clase Report HR?

Mira la casilla donde pone: Datos mtro.(infotipos): y comparalo con el report que copiaste.

Un saludo.

35
Informes / Informe: Flujo de documentos
« en: 01 de Agosto de 2008, 01:44:10 pm »
En este informe se muestra el flujo entre varios documentos...

   Pedido -> Entrega -> Transporte -> etc...

En Include ZALV lo podéis descargar desde Aquí.



*&---------------------------------------------------------------------*
*& Report  zflujo_pedidos
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zflujo_pedidos.


************************************************************************
* INCLUDE
************************************************************************
INCLUDE: zalv.


************************************************************************
*DATA
************************************************************************
DATA: BEGIN OF gt_flujo OCCURS 0,
        vbeln                 LIKE vbak-vbeln,
        vkorg                 LIKE vbak-vkorg,
        vtweg                 LIKE vbak-vtweg,
        spart                 LIKE vbak-spart,
        vdatu                 LIKE vbak-vdatu,
        entrega               LIKE likp-vbeln,
        tknum                 LIKE vttk-tknum,
        daten                 LIKE vttk-daten,
        fknum                 LIKE vfkk-fknum,
        budat                 LIKE vfkp-budat,
        tdlnr                 LIKE vfkp-tdlnr,
        tdlnr_txt             LIKE lfa1-name1,
        netwr                 LIKE vfkp-netwr,
        waers                 LIKE vfkp-waers,
        ebeln                 LIKE vfkp-ebeln,
      END OF gt_flujo.


************************************************************************
*SELECTION-SCREEN
************************************************************************
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: s_vbeln FOR gt_flujo-vbeln OBLIGATORY
                                           MATCHCODE OBJECT vmva.
SELECT-OPTIONS: s_vkorg FOR gt_flujo-vkorg NO-DISPLAY.
SELECT-OPTIONS: s_vtweg FOR gt_flujo-vtweg NO-DISPLAY.
SELECT-OPTIONS: s_spart FOR gt_flujo-spart NO-DISPLAY.
SELECT-OPTIONS: s_vdatu FOR gt_flujo-vdatu NO-DISPLAY.

SELECTION-SCREEN SKIP 2.
PARAMETERS: p_vari    LIKE variant-variant.


************************************************************************
*AT SELECTION-SCREEN ON VALUE-REQUEST
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

  DATA: spec_layout           TYPE disvariant,
        gf_exit               TYPE c.

  CLEAR variant.
  MOVE sy-repid TO variant-report.

  CALL FUNCTION 'LVC_VARIANT_F4'
    EXPORTING
      is_variant = variant
      i_save     = 'A'
    IMPORTING
      e_exit     = gf_exit
      es_variant = spec_layout
    EXCEPTIONS
      not_found  = 1
      OTHERS     = 2.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF gf_exit NE 'X'.
      p_vari  = spec_layout-variant.
      variant = spec_layout.
    ENDIF.
  ENDIF.


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

  PERFORM tomar_datos.



************************************************************************
*END-OF-SELECTION
************************************************************************
END-OF-SELECTION.

  PERFORM mostrar_listado.




************************************************************************
*FORMS
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  tomar_datos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM tomar_datos .

  DATA: BEGIN OF lt_vbfa_entregas OCCURS 0,
          vbelv               LIKE vbfa-vbelv,
          vbeln               LIKE vbfa-vbeln,
          vkorg               LIKE vbak-vkorg,
          vtweg               LIKE vbak-vtweg,
          spart               LIKE vbak-spart,
          vdatu               LIKE vbak-vdatu,
        END OF lt_vbfa_entregas.


  DATA: lt_vbfa_transportes   LIKE vbfa OCCURS 0 WITH HEADER LINE.

  DATA: lt_lfa1               LIKE lfa1 OCCURS 0 WITH HEADER LINE.

  DATA: BEGIN OF lt_datos_gasto OCCURS 0,
          rebel               LIKE vfkp-rebel,
          fknum               LIKE vfkk-fknum,
          tdlnr               LIKE vfkp-tdlnr,
          budat               LIKE vfkp-budat,
          netwr               LIKE vfkp-netwr,
          waers               LIKE vfkp-waers,
          ebeln               LIKE vfkp-ebeln,
       END OF lt_datos_gasto.

  DATA: BEGIN OF lt_datos_transporte OCCURS 0,
          tknum               LIKE vttk-tknum,
          daten               LIKE vttk-daten,
          dtabf               LIKE vttk-dtabf,
        END OF lt_datos_transporte.


  SELECT vbfa~vbelv vbfa~vbeln
         vbak~vkorg vbak~vtweg vbak~spart vbak~vdatu
         INTO TABLE lt_vbfa_entregas
  FROM vbfa JOIN vbak ON vbfa~vbelv = vbak~vbeln
  WHERE vbfa~vbelv   IN s_vbeln
    AND vbfa~vbtyp_n =  'J'
    AND vbfa~vbtyp_v =  'C'
    AND vbak~vkorg   IN s_vkorg
    AND vbak~vtweg   IN s_vtweg
    AND vbak~spart   IN s_spart
    AND vbak~vdatu   IN s_vdatu.

  CHECK sy-subrc = 0.

  SORT lt_vbfa_entregas BY vbelv vbeln.
  DELETE ADJACENT DUPLICATES FROM lt_vbfa_entregas
         COMPARING vbelv vbeln.


  SELECT * INTO TABLE lt_vbfa_transportes
  FROM vbfa
  FOR ALL ENTRIES IN lt_vbfa_entregas
  WHERE vbelv   = lt_vbfa_entregas-vbeln
    AND vbtyp_n =  '8'
    AND vbtyp_v =  'J'.


  SELECT tknum daten dtabf
  INTO CORRESPONDING FIELDS OF TABLE lt_datos_transporte
  FROM vttk
  FOR ALL ENTRIES IN lt_vbfa_transportes
  WHERE tknum = lt_vbfa_transportes-vbeln.


  SELECT vfkp~rebel vfkk~fknum vfkp~tdlnr vfkp~budat
         vfkp~netwr vfkp~waers vfkp~ebeln
         INTO CORRESPONDING FIELDS OF TABLE lt_datos_gasto
         FROM vfkk JOIN vfkp ON vfkk~mandt = vfkp~mandt
                            AND vfkk~fknum = vfkp~fknum
         FOR ALL entries IN lt_vbfa_transportes
                     WHERE vfkp~rebel = lt_vbfa_transportes-vbeln.



  LOOP AT lt_vbfa_entregas.
    CLEAR gt_flujo.
    gt_flujo-vbeln   = lt_vbfa_entregas-vbelv.
    gt_flujo-vkorg   = lt_vbfa_entregas-vkorg.
    gt_flujo-vtweg   = lt_vbfa_entregas-vtweg.
    gt_flujo-spart   = lt_vbfa_entregas-spart.
    gt_flujo-vdatu   = lt_vbfa_entregas-vdatu.
    gt_flujo-entrega = lt_vbfa_entregas-vbeln.

    LOOP AT lt_vbfa_transportes WHERE vbelv = lt_vbfa_entregas-vbeln.

      gt_flujo-tknum = lt_vbfa_transportes-vbeln.
      CLEAR lt_datos_transporte.
      READ TABLE lt_datos_transporte WITH KEY tknum = gt_flujo-tknum.
      IF lt_datos_transporte-daten IS INITIAL.
        gt_flujo-daten  = lt_datos_transporte-dtabf.
      ELSE.
        gt_flujo-daten  = lt_datos_transporte-daten.
      ENDIF.


      LOOP AT lt_datos_gasto WHERE rebel = lt_vbfa_transportes-vbeln.

        gt_flujo-fknum  = lt_datos_gasto-fknum.
        gt_flujo-tdlnr  = lt_datos_gasto-tdlnr.
        gt_flujo-budat  = lt_datos_gasto-budat.
        gt_flujo-netwr  = lt_datos_gasto-netwr.
        gt_flujo-waers  = lt_datos_gasto-waers.
        gt_flujo-ebeln  = lt_datos_gasto-ebeln.

        COLLECT gt_flujo.

      ENDLOOP.
      IF sy-subrc <> 0.
        COLLECT gt_flujo.
      ENDIF.

    ENDLOOP.
    IF sy-subrc <> 0.
      COLLECT gt_flujo.
    ENDIF.
  ENDLOOP.


  IF NOT gt_flujo[] IS INITIAL.

*   Agente de servicios
    SELECT * INTO TABLE lt_lfa1
    FROM lfa1
    FOR ALL ENTRIES IN gt_flujo
    WHERE lifnr = gt_flujo-tdlnr.

    LOOP AT lt_lfa1.
      gt_flujo-tdlnr_txt = lt_lfa1-name1.
      MODIFY gt_flujo TRANSPORTING tdlnr_txt
                      WHERE tdlnr = lt_lfa1-lifnr.
    ENDLOOP.

  ENDIF.


ENDFORM.                    " tomar_datos

*&---------------------------------------------------------------------*
*&      Form  mostrar_listado
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM mostrar_listado .

  repname = sy-repid.

* Descripción estándar de campos
  PERFORM obt_descrip_campos_tabla USING repname 'GT_FLUJO'.

* Se realizan los cambios de descripciones
  PERFORM cambio_descripcion USING:
   'TDLNR_TXT' 'Nombre agente'(l01)        'Nombre agente'(l01)
               'Nombre agente'(l01)        'Nombre agente'(l01)   'M',
   'VBELN'     'Pedido'(l02)               'Pedido'(l02)
               'Pedido'(l02)               'Pedido'(l02)          'M',
   'FKNUM'     'Nº Gasto'(l03)             'Nº Gasto'(l03)
               'Nº Gasto'(l03)             'Nº Gasto'(l03)        'M',
   'TDLNR'     'Agente'(l04)               'Agente'(l04)
               'Agente'(l04)               'Agente'(l04)          'M',
   'EBELN'     'Ped. compras'(l05)         'Ped. compras'(l05)
               'Ped. compras'(l05)         'Ped. compras'(l05)    'M',
   'DATEN'     'Fin/Despacho'(l06)         'Fin/Despacho'(l06)
               'Fin/Despacho'(l06)         'Fin/Despacho'(l06)    'M'.


* Características generales del listado
  PERFORM carac_gen_listado.

* Asignamos campos moneda
  PERFORM asignar_moneda_columna USING: 'NETWR'   'WAERS'.


* Asignamos/eliminamos campos clave
  PERFORM asign_o_quitar_campo_clave USING: 'VBELN'     ' ',
                                            'ENTREGA'   ' ',
                                            'TKNUM'     ' ',
                                            'FKNUM'     ' '.
* Asignamos Hotspot
  PERFORM activar_hotspot USING: 'VBELN'       'X',
                                 'ENTREGA'     'X',
                                 'TKNUM'       'X',
                                 'FKNUM'       'X',
                                 'TDLNR'       'X',
                                 'EBELN'       'X'.

* Eliminar campos de visualización
  PERFORM elim_campos_de_visualizacion USING: 'VKORG',
                                              'VTWEG',
                                              'SPART',
                                              'VDATU'.

* Variante de visualización
  variant-report  = repname.
  variant-variant = p_vari.


* Asignación de User Command
  PERFORM asignar_user_command.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = repname
      is_layout          = layout
      it_fieldcat        = fieldtab[]
      i_save             = 'A'
      it_events          = events[]
      is_variant         = variant
    TABLES
      t_outtab           = gt_flujo
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.


ENDFORM.                    " mostrar_listado

*---------------------------------------------------------------------*
*       FORM user_command                                             *
*---------------------------------------------------------------------*
*       Interprete de comandos para las opciones no estándar de
* usuario sobre el listado
*---------------------------------------------------------------------*

FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  DATA: lf_ebeln              LIKE vfkp-ebeln.

  CASE r_ucomm.
    WHEN '&IC1'.
      CASE rs_selfield-fieldname.
        WHEN 'VBELN'.
          CHECK NOT rs_selfield-value IS INITIAL.

          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

        WHEN 'ENTREGA'.
          CHECK NOT rs_selfield-value IS INITIAL.

          SET PARAMETER ID 'VL' FIELD rs_selfield-value.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

        WHEN 'TKNUM'.
          CHECK NOT rs_selfield-value IS INITIAL.

          SET PARAMETER ID 'TNR' FIELD rs_selfield-value.
          CALL TRANSACTION 'VT03N' AND SKIP FIRST SCREEN.

        WHEN 'FKNUM'.
          CHECK NOT rs_selfield-value IS INITIAL.

          SET PARAMETER ID 'FKK' FIELD rs_selfield-value.
          CALL TRANSACTION 'VI03' AND SKIP FIRST SCREEN.

        WHEN 'TDLNR'.
          CHECK NOT rs_selfield-value IS INITIAL.

          SET PARAMETER ID 'LIF' FIELD rs_selfield-value.
          SET PARAMETER ID 'KDY' FIELD '/130/380/110/120'.
          CALL TRANSACTION 'MK03'  AND SKIP FIRST SCREEN.

        WHEN 'EBELN'.
          CHECK NOT rs_selfield-value IS INITIAL.

          lf_ebeln = rs_selfield-value.

          CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
            EXPORTING
              i_ebeln                    = lf_ebeln
*          i_ebelp                    =
*         I_ENJOY                    = 'X'
*         I_PREVIEW                  =
*         I_DATA_FROM_BUFFER         =
*         I_BSTYP                    =
              i_display_only             = 'X'
*         I_EDIT                     = ' '
*          i_etenr                    =
*         I_DOC_INITIATOR            =
           EXCEPTIONS
             not_found                  = 1
             no_authority               = 2
             invalid_call               = 3
             preview_not_possible       = 4
             OTHERS                     = 5
                    .
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDIF.

      ENDCASE.
  ENDCASE.

ENDFORM.                    "user_command

*&---------------------------------------------------------------------*
*&      Form  cambio_descripcion
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM cambio_descripcion USING pf_fieldname
                              pf_scrtext_l
                              pf_scrtext_m
                              pf_scrtext_s
                              pf_coltext
                              pf_ddictxt.


  READ TABLE fieldtab WITH KEY fieldname = pf_fieldname
     ASSIGNING <fs>.
  IF sy-subrc EQ 0.
    <fs>-seltext_l    = pf_scrtext_l.
    <fs>-seltext_m    = pf_scrtext_m.
    <fs>-seltext_s    = pf_scrtext_s.
    <fs>-reptext_ddic = pf_coltext.
    <fs>-ddictxt      = pf_ddictxt.
  ENDIF.


ENDFORM.                    " cambio_descripcion

*&---------------------------------------------------------------------*
*&      Form  eliminar_col_seleccion
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM eliminar_col_seleccion USING pf_fieldname.

  READ TABLE fieldtab WITH KEY fieldname = pf_fieldname
     ASSIGNING <fs>.
  IF sy-subrc EQ 0.
    <fs>-no_out = 'X'.
    <fs>-tech   = 'X'.
  ENDIF.

ENDFORM.                    " eliminar_col_seleccion




Saludos...

36
Programación ABAP / Re: COPY / PASTE en table control
« en: 05 de Junio de 2008, 11:07:03 am »
Hola Mehdi.

Yo trabajo también con la versión 6.00.

No se me ocurre ahora mismo como solucionar tu problema. A ver si hay suerte y alguien lo sabe.

 ???

37
Programación ABAP / Re: COPY / PASTE en table control
« en: 30 de Mayo de 2008, 12:39:39 pm »
Me ha llegado un correo y me comentan que les da un error al compilar el ejemplo antes comentado.

El error es el siguiente:
"HEXA1" must be a character-type data object (data type C, N, D, T or STRING) .      
Solución para este problema:

Tenéis que ir a: Pasar a / Atributos

Os saltará una pantalla, pues abajo a la izquierda hay que quitar el flag Verif.unicode activas

Un saludo.

38
Pásame por un lado el programa que lanza el formulario y por otro el formulario en txt a mi correo.

Para descargar el formulario utiliza el programa RSTXSCRP.

Haber si veo que esta pasando.

Un saludo...



39
Programación ABAP / Re: BAPI_0050_CREATE
« en: 03 de Abril de 2008, 01:43:36 pm »
He visto este ejemplo en el SDN.

Si te puede servir de ayuda para ver como rellena los datos...

Código: [Seleccionar]
REPORT ztest LINE-SIZE 80 NO STANDARD PAGE HEADING MESSAGE-ID 00.

DATA: BEGIN OF header.
        INCLUDE STRUCTURE bapi_0050_header.
DATA: END OF header.

DATA: BEGIN OF item OCCURS 0.
        INCLUDE STRUCTURE bapi_0050_item.
DATA: END OF item.

DATA: BEGIN OF sender OCCURS 0.
        INCLUDE STRUCTURE bapi_0050_item.
DATA: END OF sender.

DATA: BEGIN OF period OCCURS 0.
        INCLUDE STRUCTURE bapi_0050_period.
DATA: END OF period.

DATA: BEGIN OF period_sender OCCURS 0.
        INCLUDE STRUCTURE bapi_0050_period.
DATA: END OF period_sender.

DATA: BEGIN OF return OCCURS 0.
        INCLUDE STRUCTURE bapiret2.
DATA: END OF return.

DATA: poper(3) TYPE n,

start-of-selection.

PERFORM update_using_bapi .

*&---------------------------------------------------------------------
*& Form update_using_bapi
*&---------------------------------------------------------------------
*   text
*----------------------------------------------------------------------
FORM update_using_bapi .

  PERFORM get_current_period.
  PERFORM fill_header.
  PERFORM fill_item.
  PERFORM fill_sender.
  PERFORM fill_period.
  PERFORM save_doc.

ENDFORM. " update_using_bapi

*&---------------------------------------------------------------------
*& Form fill_header
*---------------------------------------------------------------------
FORM fill_header .

  REFRESH: item,
  period.

  MOVE sy-datum TO : header-docdate.

  header-fm_area = 'COCD'.
  header-version = '000'.
  header-docstate = '1'.
  header-doctype = '1'.
  header-process = 'TRAN'.
  header-doctype = 'TRAN'.

ENDFORM. " fill_header

*&---------------------------------------------------------------------
*& Form fill_sender
*&---------------------------------------------------------------------
FORM fill_sender.

  sender-item_num = 1.
  sender-fisc_year = '2007'.
  sender-budcat = '9F'.

  sender-budtype = 'TSFS'.

  sender-distkey = '0'.

  sender-fund = '300002'.
  sender-funds_ctr = '101165'.
  sender-cmmt_item = 'CITEM'.
  sender-trans_curr = 'CAD'.
  sender-total_amount = '123.45'.
  sender-valtype = 'B1'.

  APPEND sender.

ENDFORM. " fill_sender

*&---------------------------------------------------------------------
*& Form fill_item
*&---------------------------------------------------------------------
FORM fill_item .


  item-item_num = 2.
  item-fisc_year = '2007'.
  item-budcat = '9F'.

  item-budtype = 'TSFR'.

  item-distkey = '0'.

  item-fund = '300002'.
  item-funds_ctr = '100653'.
  item-cmmt_item = 'CITEM'.
  item-trans_curr = 'CAD'.
  item-total_amount = '123.45'.
  item-valtype = 'B1'.

  APPEND item.

ENDFORM. " fill_item

*&---------------------------------------------------------------------
*& Form save_doc
*&---------------------------------------------------------------------
FORM save_doc .

  DATA: do_commit,
  first VALUE 'X'.

  CLEAR return.
  REFRESH return.

  CALL FUNCTION 'BAPI_0050_CREATE'
    EXPORTING
      language           = 'E'
      header_data        = header
      testrun            = 'X'
    TABLES
      item_data          = item
      sender_item_data   = sender
      sender_period_data = period_sender
      period_data        = period
      return             = return.

  CLEAR return.
  REFRESH return.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    IMPORTING
      return = return.

ENDFORM. " save_doc

*&---------------------------------------------------------------------
*& Form fill_period
*&---------------------------------------------------------------------
*       text
*----------------------------------------------------------------------
FORM fill_period .

  period-item_num = 1.
  period-budgeting_period = poper.
  period-period_amount = '123.45'.
  APPEND period.

  period_sender-item_num = 1.
  period_sender-budgeting_period = poper.
  period_sender-period_amount = '123.45'.
  APPEND period_sender.

ENDFORM. " fill_period

*&---------------------------------------------------------------------
*& Form get_current_period
*&---------------------------------------------------------------------
*      text
*----------------------------------------------------------------------
FORM get_current_period .

  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date  = sy-datum
      i_periv = 'VA'
    IMPORTING
      e_buper = poper.

ENDFORM. " get_current_period


Un saludo.

40
Programación ABAP / Re: Busco transacción LIBS
« en: 28 de Febrero de 2008, 04:18:41 pm »
En la documentación ABAP y Ejemplos tienes que seguir la siguiente ruta:
BC/Imágenes en pantalla ABAP/Listas/Listas complejas/Colores posibles en listas

Te pongo el código del programa.
Código: [Seleccionar]
REPORT demo_list_format_color_1 .

DATA i TYPE i VALUE 0.
DATA col(15) TYPE c.

WHILE i < 8.

  CASE i.
    WHEN 0. col = 'COL_BACKGROUND '.
    WHEN 1. col = 'COL_HEADING    '.
    WHEN 2. col = 'COL_NORMAL     '.
    WHEN 3. col = 'COL_TOTAL      '.
    WHEN 4. col = 'COL_KEY        '.
    WHEN 5. col = 'COL_POSITIVE   '.
    WHEN 6. col = 'COL_NEGATIVE   '.
    WHEN 7. col = 'COL_GROUP      '.
  ENDCASE.

  FORMAT INTENSIFIED COLOR = i.
  WRITE: /(4) i, AT 7            sy-vline,
            col,                 sy-vline,
            col INTENSIFIED OFF, sy-vline,
            col INVERSE.

  i = i + 1.

ENDWHILE.

Resultado:

41
Programación ABAP / Re: Coger texto descriptivo de un dominio
« en: 07 de Febrero de 2008, 04:44:03 pm »
Utiliza esta función RM_DOMAIN_VALUES_GET, te pongo un ejemplo.

Código: [Seleccionar]
FORM recuperar_txt_destino .
  DATA: BEGIN OF dom_values OCCURS 0.
  DATA: domvalue TYPE char10,
        ddtext   TYPE val_text.
  DATA: END OF dom_values.

  DATA: t_domain_values TYPE dd07v OCCURS 0.
  DATA: e_domain_values TYPE dd07v.


  REFRESH: t_domain_values, dom_values.

  CALL FUNCTION 'RM_DOMAIN_VALUES_GET'
    EXPORTING
      i_name          = 'ZDESTI'    "Dominio
      i_langu         = sy-langu
      i_read_texts    = 'X'         "Recupera descripción
    IMPORTING
      e_domain_values = t_domain_values
    EXCEPTIONS
      illegal_input   = 1
      OTHERS          = 2.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CLEAR txt_otro_destino.
  LOOP AT t_domain_values INTO e_domain_values
          WHERE domvalue_l = zwp_cabe-destino.

    dom_values-domvalue = e_domain_values-domvalue_l.
    txt_otro_destino    = e_domain_values-ddtext.
  ENDLOOP.

ENDFORM.                    " recuperar_txt_destino

Un saludo...

42
Programación ABAP / Re: Excel con diferentes hojas
« en: 31 de Enero de 2008, 06:17:18 pm »
Gracias a la introducción que nos ha dado nuestro amigo ADGP. Mi compañero ha realizado una función que de forma muy sencilla podemos leer un libro excel.

Este es el enlace donde lo podéis encontrar.
http://www.abap.es/foro/index.php?topic=217.msg443#msg443

 ;)

43
Funciones / Funcion para leer un EXCEL con sus pestañas
« en: 31 de Enero de 2008, 06:12:03 pm »
Esta función lee un excel diferenciando cada pestaña.

Hay que fijarse en la tabla de salida.
*"  TABLES
*"      INTERN_SALIDA STRUCTURE  ZALSMEX_TABLINE


Se puede ver que la estructura es de una tabla Z, simplemente hay que copiar la estructura ALSMEX_TABLINE y añadirle un campo CHAR de 40 caracteres, que es donde vamos a recoger el nombre de la pestaña a la que corresponde.

Código: [Seleccionar]
  DATA: lt_zalsmex_tabline   LIKE zalsmex_tabline
                           OCCURS 0 WITH HEADER LINE.


  CALL FUNCTION 'ZEXCEL_LECTURA_LIBRO'
    EXPORTING
      filename                = pf_file
      i_begin_col             = 1
      i_begin_row             = 2
      i_end_col               = 25
      i_end_row               = 10000
    TABLES
      intern_salida           = lt_zalsmex_tabline
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

Para no tener que modificar el código es aconsejable que el campo que vais a añadir tenga el nombre de PESTANIA.

Código: [Seleccionar]
FUNCTION zexcel_lectura_libro .
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     VALUE(FILENAME) LIKE  RLGRAP-FILENAME
*"     VALUE(I_BEGIN_COL) TYPE  I
*"     VALUE(I_BEGIN_ROW) TYPE  I
*"     VALUE(I_END_COL) TYPE  I
*"     VALUE(I_END_ROW) TYPE  I
*"  TABLES
*"      INTERN_SALIDA STRUCTURE  ZALSMEX_TABLINE
*"  EXCEPTIONS
*"      INCONSISTENT_PARAMETERS
*"      UPLOAD_OLE
*"----------------------------------------------------------------------


* Variables Locales
  DATA: l_excel               TYPE ole2_object,
        l_libro               TYPE ole2_object,
        l_hoja                TYPE ole2_object,
        l_cont                TYPE i,
        l_celli               TYPE ole2_object,
        l_cellf               TYPE ole2_object,
        l_cell                TYPE ole2_object,
        lt_tabla              TYPE TABLE OF ty_s_senderline.

  DATA: ld_separator          TYPE  c.

  DATA: ld_rc                 TYPE i.

  DATA: intern                LIKE alsmex_tabline OCCURS 0
                                                  WITH HEADER LINE.

  DATA: lf_pestania(50).



* Se verifica que las filas y columnas sean coherentes
  IF i_begin_row > i_end_row.
    RAISE inconsistent_parameters.
  ENDIF.
  IF i_begin_col > i_end_col.
    RAISE inconsistent_parameters.
  ENDIF.


* Abrimos el Excel
  IF l_excel-header = space OR l_excel-handle = -1.
    CREATE OBJECT l_excel 'Excel.Application'.
  ENDIF.
  CALL METHOD OF l_excel 'Workbooks' = l_libro.
  CALL METHOD OF l_libro 'Open'
    EXPORTING
    #1 = filename.


* Se identifica el separador de campos
  CLASS cl_abap_char_utilities DEFINITION LOAD.
  ld_separator = cl_abap_char_utilities=>horizontal_tab.


* Recorremos las Hojas del Excel
  DO.

*-- Incrementamos el Contador para ir de hoja en hoja
    ADD 1 TO l_cont.

*-- Limpiamos los objetos
    FREE OBJECT: l_cell, l_celli, l_cellf, l_hoja.
    CLEAR lt_tabla[].

*-- Leemos la Hoja
    CALL METHOD OF l_excel 'Worksheets' = l_hoja
      EXPORTING
      #1 = l_cont.

*-- Si no existe la hoja Salimos del Bucle
    IF NOT sy-subrc IS INITIAL.
      EXIT.
    ENDIF.

*   Tomamos el nombre de la pestaña
    GET PROPERTY OF l_hoja 'NAME' = lf_pestania.
    COMMIT WORK AND WAIT.


*-- Recogemos la Primera Celda
    CALL METHOD OF l_hoja 'Cells' = l_celli
      EXPORTING
      #1 = i_begin_row
      #2 = i_begin_col.
    COMMIT WORK AND WAIT.


*-- Recogemos la Ultima Celda
    CALL METHOD OF l_hoja 'Cells' = l_cellf
      EXPORTING
      #1 = i_end_row
      #2 = i_end_col.
    COMMIT WORK AND WAIT.

*-- Recogemos las celdas comprendidas entre la Primera y la Ultima
*-- y lo copiamos a la memoria intermedia
    CALL METHOD OF l_hoja 'RANGE' = l_cell
      EXPORTING
      #1 = l_celli
      #2 = l_cellf.
    COMMIT WORK AND WAIT.
    CALL METHOD OF l_cell 'SELECT'.
    COMMIT WORK AND WAIT.
    CALL METHOD OF l_cell 'COPY'.


*-- Recogemos los Valores del portapapeles
    CALL METHOD cl_gui_frontend_services=>clipboard_import
      IMPORTING
        data                 = lt_tabla
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        not_supported_by_gui = 3
        OTHERS               = 4.

    IF sy-subrc <> 0.
      MESSAGE a037(alsmex).
    ENDIF.

*-- Limpiamos los valores en blanco
    SORT lt_tabla.
    DELETE lt_tabla WHERE LINE EQ space.
    CLEAR: sy-subrc.

*-- Recogemos los datos a la tabla de Salida
    CHECK NOT lt_tabla[] IS INITIAL.


    PERFORM separated_to_intern_convert TABLES lt_tabla intern
                                        USING  ld_separator.

*   Se vuelca el contenido de la hoja tratada en la tabla con la
*   identificación de la pestaña.
    LOOP AT intern.
      CLEAR intern_salida.
      intern_salida-pestania = lf_pestania.
      MOVE-CORRESPONDING intern TO intern_salida.
      APPEND intern_salida.
    ENDLOOP.

*   borramos el portapapeles
    REFRESH lt_tabla.
    CALL METHOD cl_gui_frontend_services=>clipboard_export
       IMPORTING
          data                 = lt_tabla
       CHANGING
          rc                   = ld_rc
       EXCEPTIONS
          cntl_error           = 1
*       ERROR_NO_GUI         = 2
*       NOT_SUPPORTED_BY_GUI = 3
          OTHERS               = 4.

  ENDDO.

* Cerramos el Excel
  CALL METHOD OF l_excel 'QUIT'.


*-- Limpiamos los objetos
  FREE OBJECT l_libro.
  FREE OBJECT l_hoja.

  FREE OBJECT l_excel.
  FREE OBJECT l_celli.
  FREE OBJECT l_cellf.
  FREE OBJECT l_cell.


ENDFUNCTION.

*&---------------------------------------------------------------------*
*&      Form  SEPARATED_TO_INTERN_CONVERT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM separated_to_intern_convert TABLES i_tab       TYPE ty_t_sender
                                        i_intern    TYPE ty_t_itab
                                 USING  i_separator TYPE c.
  DATA: l_sic_tabix LIKE sy-tabix,
        l_sic_col   TYPE kcd_ex_col.
  DATA: l_fdpos     LIKE sy-fdpos.

  REFRESH i_intern.

  LOOP AT i_tab.
    l_sic_tabix = sy-tabix.
    l_sic_col = 0.
    WHILE i_tab CA i_separator.
      l_fdpos = sy-fdpos.
      l_sic_col = l_sic_col + 1.
      PERFORM line_to_cell_separat TABLES i_intern
                                   USING  i_tab l_sic_tabix l_sic_col
                                          i_separator l_fdpos.
    ENDWHILE.
    IF i_tab <> space.
      CLEAR i_intern.
      i_intern-row = l_sic_tabix.
      i_intern-col = l_sic_col + 1.
      i_intern-value = i_tab.
      APPEND i_intern.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " SEPARATED_TO_INTERN_CONVERT

*&---------------------------------------------------------------------*
*&      Form  line_to_cell_separat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM line_to_cell_separat TABLES i_intern    TYPE ty_t_itab
                          USING  i_line
                                 i_row       LIKE sy-tabix
                                 ch_cell_col TYPE kcd_ex_col
                                 i_separator TYPE c
                                 i_fdpos     LIKE sy-fdpos.

  DATA: l_string   TYPE ty_s_senderline.
  DATA  l_sic_int  TYPE i.

  CLEAR i_intern.
  l_sic_int = i_fdpos.
  i_intern-row = i_row.
  l_string = i_line.
  i_intern-col = ch_cell_col.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  IF ( i_separator = ';' OR  i_separator = ',' ) AND
       l_string(1) = gc_esc.
    PERFORM line_to_cell_esc_sep USING l_string
                                       l_sic_int
                                       i_separator
                                       i_intern-value.
  ELSE.
    IF l_sic_int > 0.
      i_intern-value = i_line(l_sic_int).
    ENDIF.
  ENDIF.
  IF l_sic_int > 0.
    APPEND i_intern.
  ENDIF.
  l_sic_int = l_sic_int + 1.
  i_line = i_line+l_sic_int.
ENDFORM.                    "line_to_cell_separat

*&---------------------------------------------------------------------*
*&      Form  line_to_cell_esc_sep
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM line_to_cell_esc_sep USING i_string
                                i_sic_int      TYPE i
                                i_separator    TYPE c
                                i_intern_value TYPE ty_d_itabvalue.
  DATA: l_int TYPE i,
        l_cell_end(2).
  FIELD-SYMBOLS: <l_cell>.
  l_cell_end = gc_esc.
  l_cell_end+1 = i_separator .

  IF i_string CS gc_esc.
    i_string = i_string+1.
    IF i_string CS l_cell_end.
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 2.
      i_sic_int = l_int.
      i_string = i_string+l_int.
    ELSEIF i_string CS gc_esc.
*     letzte Celle
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 1.
      i_sic_int = l_int.
      i_string = i_string+l_int.
      l_int = STRLEN( i_string ).
      IF l_int > 0 . MESSAGE x001(kx) . ENDIF.
    ELSE.
      MESSAGE x001(kx) . "was ist mit csv-Format
    ENDIF.
  ENDIF.

ENDFORM.                    "line_to_cell_esc_sep


Datos globales LZEXCELTOP.
Código: [Seleccionar]
FUNCTION-POOL zexcel.                       "MESSAGE-ID ..

TYPE-POOLS: ole2.

TYPES: ty_d_itabvalue             TYPE alsmex_tabline-value.


TYPES: BEGIN OF ty_s_senderline,
         line(4096)               TYPE c,
       END OF ty_s_senderline,
     ty_t_itab                  TYPE alsmex_tabline   OCCURS 0,

     ty_t_sender                TYPE ty_s_senderline  OCCURS 0.

CONSTANTS:  gc_esc              VALUE '"'.


Un saludo...

44
Programación ABAP / Re: Función de fechas
« en: 30 de Enero de 2008, 11:01:49 am »
Si nos pones exactamente el mensaje de error o el DUMP igual te podemos decir exactamente que ocurre. Aunque por lo que dices parece que en uno de los campos del EXPORTING no está declarado como indica la función.

Saludos...

45
Programación ABAP / Re: Función de fechas
« en: 29 de Enero de 2008, 03:25:08 pm »
Con esta función puedes sumar: Dias, Semanas, Meses o Años.

En la variable v_iprkz le indicas que quieres sumar.

* ' '  Día
*  1   Semana
*  2   Mes
*  3   Año

Código: [Seleccionar]
  DATA: v_fecha  LIKE sy-datum,
        v_time   LIKE mara-mhdhb VALUE 9,
        v_iprkz  LIKE mara-iprkz VALUE 2.     "Equivale a 'M' de Mes.

  CALL FUNCTION 'ADD_TIME_TO_DATE'
    EXPORTING
      i_idate                    = sy-datum
      i_time                     = v_time     "Número de meses a sumar
      i_iprkz                    = v_iprkz
*     I_RDMHD                    =            " Aquí se le indica el signo + o -
   IMPORTING
     o_idate                     = v_fecha
   EXCEPTIONS
     invalid_period              = 1
     invalid_round_up_rule       = 2
     internal_error              = 3
     OTHERS                      = 4.

Un saludo...

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