#1
|
|||
|
|||
leer valor con letra al final
Hola,
tengo que leer estos valores de una tabla interna y controlarlos, dependiendo de la letra final (D, E, P,) 00000162|A-AA-00031-D 00000162|A-AA-00031-E 00000162|A-AA-00031-P 00000162|A-AA-00031-PM Como puedo capturar estos valores y asignarlos a una variable. He probado un: CLEAR p_pskio. CLEAR tab_poski. LOOP AT tab_poski WHERE poski = '%O'. ENDLOOP. p_pskio = tab_poski-poski. Y no funciona |
#2
|
|||
|
|||
Esa lista que nos das, ¿es un solo campo? ¿son varios campos? Si son varios campos, qué carácter ("|" o "-") de los que nos pasas son los que los delimitan?
Voy a suponer que son un solo campo, por lo que veo en tu código. La condición que tienes que usar en el WHERE es "LIKE" y no "=". Luego viene el tema de si hay que usar "*" o "%", y que nunca soy capaz de recordar qué se usa dónde. Así que toca hacer pruebas con el LIKE y los % *
__________________
"Porque algunos sabemos que somos parte del problema"
|
#3
|
||||
|
||||
entiendo que el campo POSKI tiene los siguientes valores
A-AA-00031-D A-AA-00031-E A-AA-00031-P A-AA-00031-PM si D,E ó P están siempre en la misma posición podes compararlo de la siguiente manera al recorrer la tabla
__________________
Sebastián Chiavia |
#4
|
||||
|
||||
Holas, puedes hacerlo de la siguiente manera
Hay otra forma que creo que puede ser mas optima dependiendo de la cantidad de datos que estas recuperando de la BD dentro de la tabla interna tab_poski, es creando un rango y colocando el valor I dentro del campo SIGN, CP dentro del campo OPTION y *D, *E, *P dentro del campo LOW del rango En total tendrias 3 lineas dentro del rango de esta forma I CP *D I CP *E I CP *P Y cuando consultes simplemente le das en la condicion del SELECT el valor del rango al campo determinado (IN), espero te pueda ayudar ^^
__________________
David Carballido Córdova |
#5
|
|||
|
|||
thanks
Hola Lozano, Mys y David,
que lujo vuestros consejos! *_* Como habeis dicho, toca hacer pruebas, thanks! |
#6
|
|||
|
|||
1 campo
Vlozano, supones bien, es un solo campo a tratar
|
#7
|
|||
|
|||
se solapan
Hola,
vuestros consejos han sido de mucha ayuda, solo tengo una incidencia: Los casos : cst_prart_o LIKE prps-prart VALUE 'O', cst_prart_do LIKE prps-prart VALUE 'DO', SE SOLAPAN y no se como tratarlos para que funcione bien. Os paso el código: CLEAR: p_pskip, p_pskio,p_pskido, p_pskiat, p_pskiss, p_pskie,p_pskiom. CLEAR tab_poski. LOOP AT tab_poski. int_stlen = STRLEN( tab_poski-poski ). int_stlen = int_stlen - 1. int_stlen2 = int_stlen - 1. IF tab_poski-poski+int_stlen(1) EQ cst_prart_p. IF sy-subrc = 0. p_pskip = tab_poski-poski. est_nivel2p-poski = p_pskip. ELSE. ENDIF. ELSEIF tab_poski-poski+int_stlen(1) EQ cst_prart_o. IF sy-subrc = 0. p_pskio = tab_poski-poski. est_nivel2o-poski = p_pskio. ELSE. ENDIF. ELSEIF tab_poski-poski+int_stlen2(2) EQ cst_prart_do. IF sy-subrc = 0. p_pskido = tab_poski-poski. est_nivel2do-poski = p_pskido. ELSE. ENDIF. |
#8
|
|||
|
|||
alguna solución?
Hola Foro,
esta incidencia está casi resuelta, alguien tiene alguna solución? |
#9
|
|||
|
|||
Para mi que estas fallando al restarle solo 1 aca:
"int_stlen2 = int_stlen - 1." Fijate de restarle 2 en vez de 1 o de poner asi: "ELSEIF tab_poski-poski+11(2) EQ cst_prart_do. IF sy-subrc = 0. p_pskido = tab_poski-poski. est_nivel2do-poski = p_pskido. ENDIF." Saludos! |
#10
|
||||
|
||||
Y si mejor te basas en los ultimos 2 caracteres del campo...
__________________
------------------- ¿Dudas para descargar manuales? Ver este tema -> |
Herramientas | Buscar en Tema |
Desplegado | |
|
|