|
#1
|
|||
|
|||
Completar BDCDATA para SELECT-OPTIONS
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, |
#2
|
||||
|
||||
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
__________________
Florentín Navarrete Moya SAP HCM Consultant Mail: Blog: |
#3
|
||||
|
||||
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 |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|