Depending on your situation, a cron job to run the routine on a monthly schedule might be easier. With this approach, you’d create a console app that does your backup and runs the report, and then schedule the execution with cron.
Lifeboat can help you set up a monthly cron job very easily. This is the method I use (albeit set as daily) to collect the latest versions of plugins from Einhugur and MBS for Plugins Pro.
If you want to do it all in your main app, you’d probably want to track the last time the report ran. No harm in checking hourly and bailing if it’s not time yet. If you set the Timer period too large, you run the risk of missing your expected date.
xojo web apps usually run as linux daemon or windows service 24/7.
you could read the next task with datetime from database, memory it.
you could run a timer in quarter-hour interval.
check if execution is possible or at good time. update/insert database task.