Agregar entradas a Infoprovider

1 comentarios



Borrar registros de una carga es relativamente sencillo y bastante conocido. Sin embargo, en muchas ocasiones se requiere agregar registros a un infoprovider, porque se quiere a partir de los registros que se van cargando generar nuevas entradas, por ejemplo, con una moneda distinta.
Este es el tema que nos ocupa hoy, veremos los puntos a considerar para realizar esta acción.

Esta tarea se realiza en la rutina de inicio de las reglas de actualización.
Lo primero que debemos hacer entonces es ingresar a las reglas de actualización y allí pulsar el botón "Rutina Inicio".


Una vez dentro de la Rutina de Inicio, debemos modificar el código tal como se explica a a continuación:

1.- Definimos una nueva estructura para realizar la carga, en este caso la llamaremos "new_struc".
La línea donde dice: "* DATA: ..." la sustituímos por las siguientes:

DATA: BEGIN OF new_struc OCCURS 0.
INCLUDE STRUCTURE /BIC/CS8ZPC_C01.
DATA: RECNO LIKE sy-tabix.
DATA: END OF new_struc.
DATA: RECNO LIKE sy-tabix.
DATA: TABIX LIKE sy-tabix.

2.- Nos ubicamos en la parte del código donde dice:
*$*$ begin of routine - insert your code only below this line *-*
* fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
* to make monitor entries
Posterior a estas líneas, incluímos lo siguiente:

REFRESH: new_struc.
CLEAR: RECNO, new_struc.
LOOP AT DATA_PACKAGE.
* Las siguientes 4 líneas copian el registro que viene en la carga tal cual, sin modificaciones
    ADD 1 TO RECNO.
    MOVE-CORRESPONDING DATA_PACKAGE TO new_struc.
    new_struc-RECNO = RECNO.
    APPEND new_struc.
* Las siguientes 4 líneas agregan un registro nuevo a la carga
* Crear las siguientes cuatro líneas tantas veces como entradas
* queramos agregar a partir de un mismo registro de carga
    ADD 1 TO RECNO.
* crear la sig. línea tantas veces como valores de infoobjetos queramos modificar
    new_struc-infoobjeto = valor.
    new_struc-RECNO = RECNO.
    APPEND new_struc.
ENDLOOP.

REFRESH DATA_PACKAGE.
DATA_PACKAGE[] = new_struc[].




Orden Bex

0 comentarios

 

En esta oportunidad veremos lo relativo a órdenes Bex, necesarias para el tratamiento de queries y libros de trabajo. La orden BEx es aquella orden en la cual se graban los objetos tratados con BEx (Queries y Libros de Trabajo) para su posterior transporte, de tal modo que no se solicita al usuario la creación de una orden cada vez que se vaya a modificar alguno de estos objetos, sino que los mismos son almacenados directamente en esta orden.

El procedimiento para transportar algún objeto que se encuentre bloqueado en esta orden será presentado posteriormente en un nuevo artículo.
A continuación la explicación directamente del sistema SAP con algunas cosas que añado para su mejor entendimiento:

Objetos BEx en sistema de transporte

Los objetos BEx (queries y libros de trabajo) son tratados de forma especial en el sistema de transporte. Dado que durante la actualización de estos objetos no puede aparecer ninguna ventana de diálogo de transporte, las órdenes para este objeto debe almacenarlas un responsable del sistema en el Workbench (área de funciones enlace para transporte).

Orden de transporte BEx estándar

Todos los objetos BEx que ya han sido transportados y, por lo tanto, ya están asignados a una clase de desarrollo, se escriben por defecto en la orden de transporte BEx estándar en caso de haber modificaciones. Esta orden la configura el responsable del sistema. Independientemente del respectivo usuario, todas las modificaciones se graban en esta orden.

Cuando se libera esta orden, el responsable del sistema debería configurar de inmediato una nueva orden BEx. En tanto que no se haya almacenado ninguna orden como orden BEx, los queries y los libros de trabajo no se pueden tratar.

Órdenes de transporte BEx para paquetes individuales

En determinadas circunstancias una orden puede que no sea suficiente para todos los objetos BEx. Esto es imaginable, por ejemplo, cuando se desea realizar un transporte de un sistema de desarrollo a diferentes sistemas productivos.

En tal caso se puede almacenar una orden BEx para cada paquete. Los objetos BEx se distribuyen entre las diferentes órdenes en función de su paquete. Dado que el paquete especifica, entre otras cosas, el destino del transporte de un objeto, es posible transportar a diferentes sistemas destino, grabar en diferentes órdenes con este procedimiento
los objetos BEx que se deben transportar a distintos sistemas destinos.

En caso de que no se haya almacenado ninguna orden especial para el paquete de un objeto, el objeto se escribe, como hasta el momento, en la orden de transporte BEx estándar.

Incluso en este procedimiento recomendamos almacenar una nueva orden inmediatamente después de haber liberado una orden.


A continuación una secuencia del procedimiento para crear una orden Bex:

1.- Se ingresa al Workbench (Tx. RSA1) y se escoge la Opción "Conexión de Transporte":


2.- Ahora se pulsa sobre el botón "BEx", tal como se indica en la siguiente figura:


3.- Si existe una orden BEx, aparecerá indicada en la pantalla; de lo contrario, para crearla, se debe pulsar el botón "Asignar/Borrar".


4.- Aparecerá la ventana típica de creación de orden. Creamos una orden y listo.




Ratios Virtuales

0 comentarios



Quería crear el blog de acuerdo al nivel de dificultad de los artículos, comenzando desde lo mas básico, pero mientras ordeno las ideas sigue pasando el tiempo y no escribo nada, así que decidí mejor ir colocando los artículos así como vayan saliendo.
Aprovechando que un colega necesitaba algo de ayuda hace poco con este tema, hoy comentaremos uno de las opciones mas útiles a la hora de construir consultas y que no todos los consultores de BI manejan, sobretodo porque se requiere cierto nivel de programación. El tema en cuestión es Características y Ratios Virtuales.

Las características y Ratios Virtuales nos sirven para determinar el valor de un infoobjeto, realizar un cálculo, en tiempo de ejecución; esto es, al momento de ejecutar la consulta. Un ejemplo muy práctico es cuando requerimos que el valor de un ratio sea determinado de acuerdo a las variables ingresadas por el usuario; es decir, el valor a determinar depende de los valores de entrada de la consulta, por lo cual no es posible almacenarlo con anterioridad en el infoprovider.

Dicho esto, vayamos al grano.

1.- Primera parte, yo la llamo preparación.

A.- Antes que nada, se crean las características y/o ratios virtuales de manera normal, como un infoobjeto común y corriente.

B.- Si no existe el proyecto de ampliación para características y Ratios Virtuales, crear uno agregando como ampliación RSR00002.

Pantalla 1.

B.1.- En componentes, se debe haber creado dos entradas:

Pantalla 2.


2.- Segunda parte, llamémosla Definición.

Ingresamos al primer componente del proyecto (EXIT_SAPMRSRU_001).

Pantalla 3.

Hay que modificar tres programas (también se podría directamente desde la Tx. SE38), vayamos por partes:

A.- Primero seleccionamos del Menú "Pasar a"-> "Datos Globales".


Pantalla 4.


B.- Pulsamos doble-click sobre zxrsrtop.


Pantalla 5.


C.- Aquí se deben agregar todos los datos (características y ratios) involucrados en el cálculo, tanto los que serán modificados, como los que serán solo leídos.

La manera de agregarlo es como se muestra en la pantalla anterior:
g_pos_cubo_infoobjeto por cada infoobjeto a utilizar.


D.- Regresamos dos veces hasta llegar nuevamente a la pantalla 3.


E.- Pulsamos doble-click sobre ZXRSRU02.

Pantalla 6.

F.- Aquí definimos como será usado cada infoobjeto:
A tomar en cuenta:

Primero va la instrucción "CASE i_s_rkb1d-infocube."

Luego "WHEN 'cubo'." con el nombre del cubo para el cual se calculará el valor del ratio o característica.

Para el caso de las características que solo le leerán, se colocan las siguientes instrucciones:
l_s_chanm-chanm = 'característica'.
l_s_chanm-mode = rrke_c_mode-read.
APPEND l_s_chanm TO e_t_chanm.

Para las características cuyo valor será modificado (características virtuales, si las hay):
l_s_chanm-chanm = 'característica'.
l_s_chanm-mode = RRKE_C_MODE-NO_SELECTION.
append l_s_chanm to e_t_chanm.

Para los ratios a ser leídos y/o calculados:
APPEND 'ratio1' TO e_t_kyfnm.
APPEND 'ratio2' TO e_t_kyfnm.
...
APPEND 'ratioN' TO e_t_kyfnm.


G.- Regresamos a la pantalla anterior.


3.- Tercera parte, Programación.


A.- Ahora vamos al tercer y ultimo programa, seleccionando del Menú “Pasar a” -> “Programa de control”.

Pantalla 7.

B.- Pulsamos doble-click sobre ZXRSRZZZ.


Pantalla 8.


C.- Aquí incluimos nuestra programación.

A considerar:
a.- Todos los infoobjetos a usar se definen primero como FIELD-SYMBOLS con la instrucción:



b.- Luego se usa la instrucción



c.- Se genera el código necesario, los datos a usar en el código son los FIELD-SYMBOLS creados, por ejemplo: