Ver la Versión Completa : select.. y suma de fechas..????
trampoboy
13/05/08, 14:47:27
Queridos abaperos… una preguntita
Tengo el siguiente Select…
SELECT bsid~blart bsid~vbeln kna1~name1 bsid~bldat bsid~wrbtr
bsid~waers INTO CORRESPONDING FIELDS OF TABLE t_datos
FROM
bsid inner join kna1 ON bsid~kunnr = kna1~kunnr
WHERE
bsid~blart in so_wlkun and
bsid~kunnr in p_client and
bsid~zfbdt + bsid~zbf3t > sy-datum .
si UD miran la parte enrojecida, tengo que sumar días a una fecha, y esta compararla con la fecha actual. si estuviera yo en ORACLE.. haría una función, la cual me daría esta suma y podría hacer la comparación.. ¿ puedo hacer eso en ABAP ? no encuentro bibliografía .. de lo contrario.. que podría hacer , para que sea optimo.? Ya que no me compila si lo hago de la actual forma…
gracias amigos..¡¡¡
Hola,
Oracle ofrece más alternativas para realizar las consultas a BBDD. Yo creo que dentro del mismo select no vas a poder hacerlo en abap.
Quizás otra persona pueda aportar más...
Un saludo
larmadovr
13/05/08, 16:44:20
Segú yo, no es posible en ABAP hacer algo parecido, pero puedes hacer lo siguiente:
SELECT bsid~blart bsid~vbeln kna1~name1 bsid~bldat bsid~wrbtr
bsid~waers INTO CORRESPONDING FIELDS OF TABLE t_datos
FROM
bsid inner join kna1 ON bsid~kunnr = kna1~kunnr
WHERE
bsid~blart in so_wlkun and
bsid~kunnr in p_client.
DATA: L_zfbdt LIKE SY-DATUM.
LOOP AT T_DATOS
L_zfbdt = T_DATOS-zfbdt + "Dias que quieres sumar".
IF L_zfbdt > SY-DATUM.
MOVE-CORRESPONDIGN T_DATOS TO T_DATOS2.
APPEND T_DATOS2.
CLEAR: T_DATOS2.
ENDIF.
CLEAR: T_DATOS, L_zfbdt.
ENDLOOP.
Al terminar este ciclo, tendras T_DATOS2 con tu información ya procesada.
NOTA: Puede ser desventaja el número de registros que va traer si al query no le validas una fecha, pero si tus llaves estan bien hechas, no debe haber mucho problema.
Espero que te sirva.
Salu2.
Pues me temo que no vas a poder hacerlo en ABAP, yo lo que haria es añadir los campos ZFBDT y ZBF3T en la tabla t_datos rellenarlos en la clausula select
despues haces
loop at t_datos.
check t_datos-zfbdt + t_datos-zbf3t > sy-datum.
aqui el codigo que quieras
endloop.
Claudia Valdespino
13/05/08, 17:24:17
Hola trampoboy, lo que puedes hacer es coloca tu select in la condición en rojo, y luego haces un LOOP a tu tabla interna con el siguiente código:
DATA: p_fecha LIKE bsid-zfbdt.
SELECT bsid~blart bsid~vbeln kna1~name1 bsid~bldat
bsid~wrbtr bsid~waers bsid~zfbdt bsid~zbd3t
INTO CORRESPONDING FIELDS OF TABLE t_datos
FROM bsid INNER JOIN kna1 ON bsid~kunnr = kna1~kunnr
WHERE bsid~blart IN so_wlkun AND
bsid~kunnr IN p_client.
LOOP AT t_datos.
CLEAR p_fecha.
* Suma N dias de la condición de pago a la fecha base
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = t_datos-zfbdt "fecha base
days = t_datos-zbd3t "dias a sumar / restar
months = '00' "meses a sumar / restar
signum = '+' "signo de la operación
years = '00' "años a sumar / restar
IMPORTING
calc_date = p_fecha. "fecha final
* Solo tomas aquellos registros cuya sumatoria sea mayor a la fecha de hoy, * por lo tanto si la fecha obtenida es menor o igual al día de hoy lo borra
IF p_fecha LE sy-datum.
DELETE t_datos INDEX sy-tabix.
ENDIF.
ENDLOOP.
Espero te sea de ayuda ;)
trampoboy
13/05/08, 19:10:41
gracias amigo(a)s.. abrasos y kariños para todo(a)s
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web