jump to navigation

Leer Campo de una Dynpro cuando es inaccesible. julio 17, 2008

Posted by gstortoni in Funciones.
Tags: , , , , ,
3 comments

Sucede a veces, que uno necesita leer un campo de una Dynpro, pero ese campo es inaccesible por ejemplo, cuando se esta usando un USER EXIT y el campo lo vemos en la pantalla, pero el import del exit, o las tablas, no lo traen, bueno entonces que hacemos??? NO se帽or llorar no es la soluci贸n 馃榾

existe una Fant谩stica funci贸n que nos permite resolver nuestro dilema, tal vez no sea la forma mas ortodoxa, pero en fin, nos saca del entuerto.
La Dichosa Funci贸n es como su nombre lo dice : UA_READ_FIELD_FROM_DYNPRO

manos a la obra.

Ingredientes:
DATA: program TYPE progname,
dynpro聽 TYPE sydynnr,
field_value TYPE dynfieldvalue.

program = sy-cprog. “Aca ingreso el nombre del programa
dynpro = sy-dynnr. “y aca va el numero de la dynpro donde esta mi campo

En mi caso deseo leer el campo FLD_CENTRO al cual no puedo acceder en tiempo de ejecuci贸n

CALL FUNCTION ‘UA_READ_FIELD_FROM_DYNPRO’
EXPORTING
id_program聽聽聽聽 = program
id_dynpro聽聽聽聽聽 = dynpro
id_field_name聽 = ‘FLD_CENTRO’
IMPORTING
ed_field_value = field_value
EXCEPTIONS
failed聽聽聽聽聽聽聽聽 = 1
OTHERS聽聽聽聽聽聽聽聽 = 2.

El valor del campo, es retornado en la variable field_value.

Ojo, la verdad no se si sea malo el uso o abuso de esta funci贸n, a mi me ha sacado de apuros, pero siempre trato de agotar las instancias para poder sacar de manera “Natural” el valor de los campos.

Saludo2

Anuncios

Crear Match Code en tiempo de ejecucion para una Dynpro julio 17, 2008

Posted by gstortoni in Match Code.
Tags: , , , , ,
1 comment so far

Esta es una forma bastante util e interesante para crear ayudas de busquedas en tiempo de ejecucion, en mi caso lo he usado en una Dynpro, ustedes veran que uso le dan.

En una Dynpro:
Primero que todo, hay que agregar dentro de la logica de proceso, luego del PAI, lo siguiente:

process聽on value-request.
field campo_que_necesitamos module module_match.

Una vez que tengamos escrito esto en la logica de proceso de la Dynpro, tenemos que crear el Module, hacemos doble click y ustedes deciden donde crearlo, por mi parte lo cree en el programa control.

Primero necesitamos los ingredientes:

data :聽begin of list_of_fields occurs 10,
fieldname like dd03l-fieldname,
end of list_of_fields.

data :聽indice like sy-tabix,
fieldname like dd03l-fieldname,
fields like help_value occurs 10 with header line,
shrinkfields like dynpread occurs 0 with header line,
dynpfields like dynpread occurs 0 with header line.

data:聽begin of ti_almacen occurs 0,
lgort like t001l-lgort,
lgobe like t001l-lgobe,
end of ti_almacen_dest.

En mi caso quiero mostrar los almacenes y su descripcion para un Centro dado.
Para ello, manualmente recojo los campos de la tabla y los almaceno en una TI.

select lgort聽lgobe
into
corresponding fields of table ti_almacen
from t001l
where werks eq
‘2000’
.


Luego Hay que definir la estructura de la ayuda de busqueda.

list_of_fields-fieldname聽= ‘T001L-LGORT’.
append list_of_fields.

list_of_fields-fieldname聽= ‘T001L-LGOBE’.
append list_of_fields.

Defino el campo que quiero que quede en la pantalla cuando haya hecho doble clic sobre mi Match Code

fieldname聽=聽‘LGORT’.

call function ‘TRANSFER_NAMES_TO_FIELDS’
exporting
selectfield聽聽聽聽聽聽聽聽=聽fieldname
tables
fields =聽fields
namelist聽聽聽聽聽聽聽聽聽聽聽=聽list_of_fields

exceptions
wrong_format_given聽=聽01.

Esta es la funcion que hace toda la maravilla

call function ‘HELP_VALUES_GET_NO_DD_NAME’
exporting
selectfield聽 =聽fieldname
titel聽 = ‘Almacen聽de聽destino’
use_user_selections = ‘S’

importing
ind =聽indice

tables
fields =聽fields
full_table聽 =聽ti_almacen
user_sel_fields =聽shrinkfields

exceptions
full_table_empty聽 =聽01
no_tablestructure_given =聽02
no_tablefields_in_dictionary聽=聽03
more_than_one_selectfield =聽04
no_electfield =聽05.


Ahora solo queda recorrer la tabla e indicar cual fue el indice que el usuario ha seleccionado.
read table ti_almacen index indice.

Con esto, paso el valor de la seleccion en este caso el LGORT a mi campo en pantalla
move ti_almacen-lgort聽to fld_almacen.

Y eso es todo, queda solo activar y disfrutar de una ayuda de busqueda sencilla. pero Muy efectiva

Grafico de Barras Dinamico con SmartForms julio 14, 2008

Posted by gstortoni in SmartForms.
Tags: , , , , , ,
5 comments

hace algun tiempo atras, me toco la tarea de mostrar un grafico de consumo para una boleta, el tema fue que me pidieron hacerlo en smartforms y que ademas, tenia el detalle de que este grafico, debia ser Dinamico.

Bueno, mi primer idea fue simplemente colocar imagenes dinamicas, pero me pidieron que consumiera聽recursos del procesador mejor, para generar dicho grafico, y no tener que hacer llamadas a las imagenes

En fin, comence a pensar como podria hacerlo, bueno luego de muchos intentos fallidos, llegue a una solucion muy bonita y muy simple jejeje

ingredientes:
Una ventana y 2 tablas.

Preparacion:
Primero, debemos crear la ventana, luego agregar ambas tablas… con la salvedad que una, debe estar justo encima de la otra. Entonces, la gracia de todo esto, es hacer que las tablas sean inversamente proporcionales al 100%, osea, si la tabla de arriba, crece un 35%, la de abajo, debe crecer un 65%, si la de arriba crece un 80%, la de abajo un 20%.

cosa a tener en mente, es que la tabla en un smartform, siempre crece hacia ABAJO.

Entonces, lo que tenemos que hacer, una vez que se ha entendido la idea (que en realidad es lo mas complejo)聽es lo siguiente, a la tabla de arriba, la llamaremos transparente y a la tabla de abajo la llamaremos tabla relleno, como se daran cuenta, la tabla de abajo es la que finalmente nos mostrara el grafico de barra, mientras que la de arriba es la que la desplaza siempre hacia abajo la de relleno.

A聽la tabla de relleno, le pondremos un color de fondo Gris, verde o lo que ustedes necesiten y si quieren un borde tambien.

se preguntaran, ahora como hacemos crecer las tablas, bueno, yo lo hice creandole un texto ( un punto .) color blanco MUY chico y con interlineado tambien muy chico, para que me acomodara en el espacio que tenia para el grafico de barras, la idea es escribir esto en cada tabla:

. \
.聽聽聽– Tabla Transparente
. /

. \
.
.聽聽聽聽聽 Tabla de Relleno
.
. /

entonces, por el medio que a ustedes mas les acomode, definan el porcentaje para cada una de las tablas, osea, si la primer tabla tiene 3 puntos, y se que el total que puedo tener son 8, a la segunda tabla de relleno, le escribo 5 puntos.

Eso ya es tarea de ustedes 馃檪

cuando tenga mas tiempo, agregare imagenes, para que los vean, realmente solo tienen que entender bien la idea de las 2 tablas y el resto sera pan comido

PD: Todos los acentos han sido obviados forzadamente, ya que no se como hacerlos en este maldito teclado en ingles 馃榾