Раз в сутки в 00:01 запускайте cron который будет формировать счета для всех пользователей.
Все остальное от лукавого :)
Можно конечно при входе пользователя в личный кабинет первым делом проверять есть ли счет, если счета нет - создавать.
select `id` from `bill` where `user_id`=123 and `time_create`>now() - interval 1 month and `payd`='n' limit 1;
если id > 0 счет найден, показываем его пользователю и подсвечиваем что есть неоплаченный счет.
если id = 0 нет счета, создаем.