Pues para dbf se me ocurre algo como
Código SQL
[-]select * from NombreTabla
where (cast(extract(month from Fecha) as integer) + PlazoMeses <= 12 and (
cast(extract(month from Fecha) as integer) + PlazoMeses < cast(extract(month from FechaHoy) as integer or
(cast(extract(month from Fecha) as integer) + PlazoMeses = cast(extract(month from FechaHoy) as integer) and
cast(extract(day from Fecha) as integer) <= cast(extract(day from FechaHoy) as integer)) and
cast(extract(year from Fecha) as integer) = cast(extract(year from FechaHoy) as integer))
or
(cast(extract(month from Fecha) as integer) + PlazoMeses > 12 and (
cast(extract(month from Fecha) as integer) + PlazoMeses - 12 < cast(extract(month from FechaHoy) as integer or
(cast(extract(month from Fecha) as integer) + PlazoMeses - 12 = cast(extract(month from FechaHoy) as integer) and
cast(extract(day from Fecha) as integer) <= cast(extract(day from FechaHoy) as integer)) and
cast(extract(year from Fecha) as integer) + 1 = cast(extract(year from FechaHoy) as integer))
or (cast(extract(month from Fecha) as integer) + PlazoMeses > 12 and
cast(extract(year from Fecha) as integer) + 1 < cast(extract(year from FechaHoy) as integer))
Igual no es una buena opción, pero así de pronto y para dbf no se me ocurre otra cosa, todo sería mejorar esto.
El problema que te comentaba antes es para los dias que no existen, por ejemplo si tienes un registro del 31/1/**** con
un mes de vencimiento te daria fecha vencimientos el 31/2/**** la cual no existe por lo que el registro saldría como vencido
el primer día del mes siguente (no se si es como lo quieres tratar)
Lo dicho, esto es solo una idea, quiza muy mala y que puede tener muchos fallos ya que no me pare a probarla en profundidad,
que habría que ir depurando para que se adaptase a tus necesidades.
Pruebalo, depuralo, mejoralo y ya me contaras