PDA

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..¡¡¡

Floren
13/05/08, 16:40:12
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.

ballan
13/05/08, 16:55:17
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