PDA

Ver la Versión Completa : Completar BDCDATA para SELECT-OPTIONS


xirir
21/07/08, 15:41:37
Hola,

Estoy invocando una transacción a la cual le paso con el BDCDATA valores para que se completen los campos de la pantalla inicial.

Logre poder ingresar en un SELECT-OPTIONS un periodo con los campos LOW y HIGH del dynpro correspondiente, pero yo necesito pasarle muchos valores individuales y no un rango.

Alguien sabe como hacer esto? Muchas gracias a todos!
Saludos,

Floren
21/07/08, 18:50:49
Hola,

¿Te es posible añadir un rango en el código del programa en lugar de hacer el batch input al select-options? Sería bastante más limpio y seguro.

Un saludo

Jonathan Barrio Rodriguez
22/07/08, 14:11:08
NO ME ACUERDO MUY BIEN COMO VA PERO AL DEFINIR el select options:

select-options: Sociedad for t001.

Lo que creas es una tabla de rangos llamada Sociedad, y tiene una extructura
de 4 campos q2ue no me acuerdo muy bien como eran tal que así...

LOW (correspondería a los datos del primer recuadro)
HIGH (para los datos del segungo campo)
SING ( puede ser EQ -igual a- IN -dentro de-)
y el último campo no me acuerdo.

Pues bien... si tienes muchos valores de sociedades, se me ocurre que cuando creas el bdc_data, las sociedades las tengas en una tabla_interna...

Loop at TI_sociedades where dato1 = "dato que le toca en esta vuelta".

BDC_data-fnam = 'sociedad-low'.
bdc_data-value = ti_sociedades-sociedad.
bdc_data-fnam = 'sociedad-sing'.
bdc_data-value = 'EQ'
append bdc_data.

ENDLOOP.

....???????

Aunque igual no es tan facil.

Por favor... si alguien ve errores que me saque de mi ignoracia.

Saludos

sirpolako
23/07/08, 08:56:35
Un select-option funciona igual que un rango. Es una tabla interna con los siguientes campos:

SIGN es un char de 1 caracter. Suele llevar la I o le E ( incluir o excluir los valores seleccionados. Normalmente I ).
OPTION char de dos caracteras. Lleva el comparador ( EQ, BT ( between ), etc.. )
LOW
HIGH.

Cuando quiero seleccionar varios valores suelo hacer:
so_filtro-sign = 'I'.
so_filtro-option = 'EQ'.
so_filtro-low = 'Valor 1'.
APPEND so_filtro.
so_filtro-sign = 'I'.
so_filtro-option = 'EQ'.
so_filtro-low = 'Valor 2'.
APPEND so_filtro.
....

El problema es que necesitas un append, y eso no sé cómo indicárselo desde el BDC_data

i_arnaiz
23/07/08, 11:35:45
Mi consejo es que os prepareis una grabación metiendo en el select options un elemento a un elemento mediante el botón de añadir linea...

haciendolo sobre la transacción VF04 sería algo así:

**********************************************************
* Primero se pulsa el botón de añadir elementos al select-option
bi_data 'X' 'SDBILLDL' '1000'.
bi_data ' ' 'BDC_OKCODE' '=%009'.

data ld_index like sy-index.
* Se cuenta el numero de pedidos que vamos a añadir
loop at gt_data where marca = 'X'.
ld_index = ld_index + 1.
endloop.

bi_data 'X' 'SAPLALDB' '3000'.
bi_data ' ' 'BDC_CURSOR' 'RSCSEL-SLOW_I(01)'.
loop at gt_data where marca = 'X'.
check not gt_data-pedido_sap is initial.
ld_index = ld_index - 1.
bi_data ' ' 'RSCSEL-SLOW_I(01)' gt_data-pedido_sap.
if not ld_index is initial.
* Si no es el último codigo se inserta el codigo de añadir nueva linea.
bi_data ' ' 'BDC_OKCODE' '=LINS'.
bi_data 'X' 'SAPLALDB' '3000'.
bi_data ' ' 'BDC_CURSOR' 'RSCSEL-SLOW_I(01)'.
endif.
endloop.
* Si es el último elemento del rango se añade el código de aceptar
bi_data ' ' 'BDC_OKCODE' '=ACPT'.
**********************************************************

Espero que podais entenderlo.

Un saludo.

Nacho

Jonathan Barrio Rodriguez
23/07/08, 11:47:49
Sí, creo que es la solución.

sólo se me ocurre el inconveniente que a veces, en vez de ser
unos cuantos concretos... si fuera una selección de rango...
pero imagino que en el fichero que pasen o en los datos que
nos de el usuario... nos lo espcificaria... y con una condición simple
lo controlariamos:

If Rango.

grabación de campos de pantalla
Else.

grabación que comenta i_arnaiz.

endif.

i_arnaiz
23/07/08, 14:20:18
Desde la entrada extendida de select-options tienes tambien una pestaña que te permite la entrada de rangos... no lo olvides, pero aun así tambien puedes convertir el rango en entradas individuales... por ejemplo.

si tienes el rango de centros desde C001 a C006 primero buscas en la tabla t001w los centros que entran en el rango y te los metes en una tabla interna, es decir (C001,C002,C003,C004,C005,C006) y luego cada uno de estos rangos los metes como entrada individual en el select-option.

;)

Un saludo.

Nacho.

xirir
23/07/08, 16:36:34
Gracias a todos!
La solucion que utilice fue la que dio i_arnaiz ya que encontre un post muy parecido en la sdn también!

Por si les interesa! Aqui va:
https://www.sdn.sap.com/irj/sdn/thread?tstart=0&threadID=914344

Saludos y gracias a todos nuevamente!