martes, 23 de diciembre de 2014

SAP BI. Sistemas fuente

Es este post os vot a hablar, dentro del entorno de SAP BI, de los sistemas fuente. Llamaremos sistema fuente a cualquier entorno del que nuestro sistema SAP BI se alimente. Puede ir desde nuestro propio sistema SAP R/3, pasando por diferentes bases de datos de diferentes sistemas, o un simple fichero plano.


Podemos hacer una definición de cada uno de ellos mas concreta:

  • Sistema SAP R/3: BI está plenamente integrado con SAP R/3. Funciona como una herramienta central de data warehousing. SAP suministra las estructuras y los programas de extracción predefinidos. Éstos permiten que los datos fuente de SAP se carguen directamente en el almacén de datos.
  • Integración con SAP XI: Puede enviar datos de fuentes SAP y externas a BI utilizando SAP Exchange Infrastructure (SAP XI). La transferencia de datos mediante SAP XI se basa en Simple Object Access Protocol (SOAP).
    SAP está basado en estándares generales para permitir la integración de sistemas externos. En el centro de la infraestructura hay una comunicación basada en XML que utiliza HTTP. El contenido específico de la aplicación se transfiere en mensajes en un esquema XML definido por el usuario del emisor al receptor utilizando Integration Server (una parte de SAP XI).
  • Sistemas externos a SAP: Es posible utilizar BI como una base de datos consolidada para el reporting que cubre toda la organización, especialmente en una infraestructura de sistema heterogénea. SAP nos proporciona herramientas que permiten implementar estas interfases con rapidez y eficiencia.
  • Proveedores de datos: BI también puede suministrarse con datos orientados al destino de los
    proveedores. Por ejemplo, ACNielsen o Dun & Bradstreet proporcionan datos de estudios de mercado que pueden cargarse en BI para su comparación y a continuación pueden valorarse respecto a sus propios datos operativos.
  • Bases de datos (DB Connect) o fuentes complejas (Universal Data Integration [UDI]): BI permite que los datos se carguen desde sistemas de bases de datos externas o fuentes complejas de datos alimentadas por drivers de terceros específicos de aplicación.
     

sábado, 13 de diciembre de 2014

Últimas novedades en facturación electrónica

Hay novedades sobre el tema de la facturación electrónica. A través de CUVIV hemos podido saber que SAP ha publicado lo siguiente:
 
- Ya está liberada para clientes pilotos la solución básica basada en la localización española de RE-FX. Las notas son las siguientes:
  • 2104258 eDocument - eInvoicing for Real-Estate
  • 2104405 eDocument Spain - eInvoicing for Real-Estate - Basic Solution
  • 2105267 RE-FX: DDIC objects for SAP note 2104258
- La nota de consultoría para la generación del XML es la 2103002 - Spain: Electronic invoice format. El contenido de la misma se liberará la semana 52.
 
- La situación actual de la solución completa; tanto la creación del XML como la firma electrónica basado en AIF y HCI también se liberará la semana 52 para clientes piloto.
 

jueves, 11 de diciembre de 2014

Manual SAP BW/BI TBW310 en español

A través de ForoSap he encontrado el manual de SAP BW/BI TBW310 en español. En mi caso, tenía este y otros manuale en ingles. Tenerlos en español es una ayuda adicional y que supongo que para todas las personas que no dominen bien el ingles una gran ayuda. Os dejo el enlace donde podeis encontrar el link para descargarlo. Debeis registraros en ForoSap para poder hacerlo.

 
 
En el manual vais a encontrar los conceptos básicos que cualquier persona que trabaje con SAP BW de SAP debe dominar. Es el pilar para posteriormente poder ir avanzando dentro del mundo del Business Intelligence.
 
El indice del libreo es el siguiente:
 
Capítulo 1: SAP NetWeaver y BI: Resumen, posicionamiento y fundamentos
  • Aspectos fundamentales de Data Warehousing y Business
  • Intelligence
  • Resumen de SAP NetWeaver Business Intelligence (BI)
  • Entrega de soluciones SAP NetWeaver: Prácticas, escenarios y tipos de utilización de TI
  • SAP NetWeaver Business Intelligence: Resumen de Data Warehousing
Capítulo 2: Objetos del nivel BI Data Warehouse
  • Workbench
  • InfoSitios: Utilización empresarial
  • InfoObjetos: Características
  • InfoObjetos: Ratios
  • El InfoCubo BI: un esquema estrella ampliado
  • Creación de InfoCubos
Capítulo 3: Adquisición y transformación de datos desde sistemas fuente SAP
  • Flujo de datos: Resumen
  • Carga de datos maestros de un sistema fuente SAP
  • Carga de datos variables desde un sistema fuente SAP
  • Procesos de ETL y carga de jerarquías
Capítulo 4: Adquisición de datos desde otros sistemas
  • Extracción desde sistemas externos: resumen
  • Carga de ficheros planos
Capítulo 5: Business Content
  • Descubrir Business Content (repository de metadatos)
  • Activación de Business Content
Capítulo 6: Otros InfoSitios
  • Objetos DataStore
  • VirtualProviders y adquisición de datos en tiempo real
  • MultiSitios e InfoSets BI
Capítulo 7: Administración de destinos de datos
  • Tareas de gestión del sistema en BI: resumen
  • Administración de InfoCubos
  • Administración de objetos DataStore
  • Cadenas de procesos
Capítulo 8: Introducción a la optimización de rendimiento de
una query
  • Introducción a la optimización del rendimiento de una query en BI
  • Agregados BI
  • BI Accelerator
  • Resumen de estadísticas

miércoles, 10 de diciembre de 2014

Como incluir un editor de texto en nuestro programa

En este post os voy a enseñar una sencilla función que nos permite habilitar un editor de textos donde podremos mostrar un texto (Por ejemplo leido con la funcion READ_TEXT) o simplemente habilitar al usuario un espacio donde el pueda escribir lo que desee.

La función que vamos a utilizar es CATSXT_SIMPLE_TEXT_EDITOR. Como veis los parámetros a pasar son muy sencillos:

  • Titulo
  • Modo de edición: Editable/No Editable
  • Posición relativa de la ventana

En la tabla CH_TEXT será donde insertaremos el texto a mostrar o de donde recogeremos el texto introducido por el usuario. Por ejemplo puede que queramos mostrar un texto en modo no editable, simplemente a nivel informativo, o puede que queramos dejar en blanco el editor de texto para que el usuario introduzca lo que quiera.

El resultado final de ejecutar el módulo de función es el siguiente:


En otro post veremos como podemos incluir en una dynpro un editor de texto como un elemento mas de la ventana. En este caso el editor de textos realmente se lanza como si fuera un pop-up. Es una alternativa mas.

martes, 9 de diciembre de 2014

Como ampliar la transacción CO11N de notificación de órdenes

Es este post vamos a ver como podemos ampliar la transacción de notificación de órdenes CO11N. Añadiremos una sub-screen donde incluiremos los campos que necesitemos notificar.

El primer paso es indicar en la parametrización que vamos a incluir una pestaña personalizada. Para realizar esto utilizaremos la transacción OPK0. Podemos añadir hasta tres pestañas personalizadas.


Añadimos la pestaña y le damos un nombre:

 
Después de esto tenemos que definir la sub-screen con los nuevos campos. Para hacer esto utilizamos una user-exit y un modulo de funciones. La user-exit es “CONFPP07” y el modulo de funciones “XCOF”.
 
De cara a almacenar los nuevos campos tenemos diferentes opciones. Una de las opciones sería añadir una APPEND a la tabla AFRU e incluir los nuevos campos. Cuidado con esta opción, la tabla AFRU es una tabla que soporta muchos registros y si realizamos un APPEND lo deberemos hacer con mucho cuidado. Otra opción sería por ejemplos guardar los nuevos campos en una tabla Z que nos creemos nosotros mismos.

Tenemos que crear una de las tres subscreen posibles. En nuestro ejemplo utilizaremos la 0900

 
E incluimos los campos que necesitemos.
 


La lógica para tratar los valores que se introduzcan en estos nuevos campos la deberemos incluir dentro de la user-exit CONFPP07.


lunes, 8 de diciembre de 2014

Introducción ABAP. Instrucciones básicas

Continuamos en este post con la introducción a ABAP. En este caso vamos a comentar las instrucciones mas básicas que podemos realizar.

Asignación

Existen varias formas de asignar a una variable:

-Asignación directa:  <variable> =  valor.
 El valor se puede especificar como un literal, el contenido de una constante  o el contenido de una variable.

-Sentencia MOVE: Asigna un valor a una variable.

             MOVE   <valor>   TO   <variable>.

-Sentencia MOVE-CORRESPONDING: Mueve el contenido de los campos de una estructura a los campos que tengan el mismo nombre de otra estructura.

           MOVE-CORRESPONDING <origen> TO <destino>.

-Sentencia CLEAR: Inicializa el contenido de un campo a su valor inicial según el tipo de dato.

            CLEAR  <campo>.

-OFFSETS:  Se puede hacer referencia parcial a una parte de un campo, indicando el número de posiciones que hay hasta la posición en la que se comienza a referenciar utilizando + y la cantidad de posiciones que se referencia entre paréntesis.

      MOVE <campo1> + <posiciones>(longitud) TO <campo2>.

 Ejemplo: DATA: d_dato1(8) TYPE c VALUE ‘ABCDEF’,
                              d_dato2(4) TYPE c.

                
                d_dato2 = d_dato1+2(4).
   Ahora   d_dato2 = ‘CDEF’.

Condicionales

Operadores condicionales.

 Igual:            <valor1>  EQ    <valor2>
                           <valor1>   =      <valor2>
 No igual:       <valor1>  NE    <valor2>
                           <valor1>   <>    <valor2>
 Mayor:          <valor1>   GT    <valor2>
                           <valor1>     >     <valor2>
 Menor:          <valor1>   LT     <valor2>
                            <valor1>   <      <valor2>
 Mayor o igual:       <valor1>  GE    <valor2>
                                    <valor1>   >=   <valor2>
 Menor o igual:       <valor1>  LE    <valor2>
                                    <valor1>   <=   <valor2>
 <valor1> BETWEEN <valor2> AND <valor3>.
 <valor1> IS INITIAL.    Si tiene el valor inicial.
 <valor> IN <rango>.    Si <valor> tiene un valor comprendido en el rango <rango>

Operadores lógicos.

<condicion1>   AND <condicion2>
< condicion1>   OR   <condicion2>
NOT <condición>.

Sentencias IF <condición> ..... ENDIF.

      Ejemplo:  IF NOT d_dato IS INITIAL.
                               WRITE  d_dato.
                       ENDIF.


 Escribe por pantalla el valor introducido en d_dato si se recibe un valor distinto del inicial.

Sentencias CASE <variable>.......ENDCASE.

Permiten ejecutar diferentes grupos de sentencias en función del valor contenido en <variable>, delimitando las sentencias con la cláusula WHEN <valor>.
El valor OTHERS comprende todos los valores que no hayan sido especificados en las anteriores cláusulas WHEN.

Ejemplo:   CONSTANTS: c_centrado TYPE c VALUE ‘c’,
                                          c_izquierda TYPE c VALUE ‘i’,
                                          c_derecha    TYPE c VALUE ‘d’.
                  DATA: d_alineación TYPE c,
                               d_texto(100) TYPE c.
                  CASE d_alineación.
                        WHEN c_centrado.
                               WRITE  d_texto CENTERED. 
                         WHEN c_izquierda.
                                WRITE d_texto LEFT-JUSTIFIED.
                         WHEN c_derecha.
                                WRITE d_texto RIGHT-JUSTIFIED.
                         WHEN OTHERS.
                                WRITE d_texto.
                  ENDCASE.


Operadores condicionales para cadenas de texto.

<cadena1>  CO   <cadena2>  Si todos los caracteres, incluidos los espacios de 1, están en 2.
Si la condición es cierta, la variable SY-FDPOS contendrá la longitud de <cadena1>, sino, contiene el OFFSET del primer carácter de <cadena1> que no existe en <cadena2>.
<cadena1>  CN   <cadena2>  Si existe algún carácter en 1 que no está en 2, incluido espacios.
Si la condición es cierta, la variable SY-FDPOS contendrá el OFFSET del primer carácter de <cadena1> que no existe en <cadena2>, sino, contiene la longitud de <cadena1>.
<cadena1>  CA   <cadena2>  Si alguno de 1 incluido espacios, está en <cadena2>.
Si la condición es cierta, la variable SY-FDPOS contendrá el OFFSET del primer carácter de <cadena1> que existe en <cadena2>, sino, contiene la longitud de <cadena1>.
<cadena1>  NA   <cadena2>  Si ninguno de los caracteres de <cadena1>, está en <cadena2>.
Si la condición es cierta, la variable SY-FDPOS contendrá la longitud de <cadena1>, sino, contendrá el OFFSET del primer carácter de <cadena1> que existe en <cadena2>.
<cadena1>  CS   <cadena2>  La condición se cumple si  <cadena1> contiene a  <cadena2>.
Si la condición es cierta, la variable SY-FDPOS contendrá el OFFSET del primer carácter de <cadena2> que existe en <cadena1>, sino, contiene la longitud de <cadena1>.
<cadena1>  NS   <cadena2>.  La condición se cumple si  <cadena1> no contiene a  <cadena2>.
Si la condición es cierta, la variable SY-FDPOS contendrá la longitud de <cadena1>, sino, contendrá el OFFSET del primer carácter de <cadena2> que existe en <cadena1>.
<cadena>  CP   <patrón>.  La condición se cumple si  <cadena> contiene el patrón de búsqueda <patrón>. Este patrón permite utilizar el carácter * para representar cualquier cadena de caracteres y + para representar cualquier carácter.
Si la condición es cierta, la variable SY-FDPOS contendrá el OFFSET del primer carácter de <patrón> que existe en <cadena>, sino, contiene la longitud de <cadena>.
Ejemplo:  La condición ‘Jose Luis Diaz’ CP ‘Jose*Diaz’ es verdadera y devuelve 0 en SY-FDPOS. La condición ‘JoseLuisDiaz’CP ‘Jose+Luis’ es falsa y devuelve 12 en SY-FDPOS.
<cadena>  NP   <patrón>.  La condición se cumple si  <cadena> no contiene el patrón de búsqueda <patrón>.
Si la condición es cierta, la variable SY-FDPOS contendrá la longitud de <cadena>, sino, contendrá el OFFSET del primer carácter de <patrón> que existe en <cadena>.