Задача: управлять из одной таблицы и разовыми задачами, и повторяющимися. Узнавать о грядущих задачах заранее в зависимости от их сложности.

К сожалению, автоматическое создание уведомлений в Notion невозможно. Так что если вам нужно получать уведомления, каждый раз их нужно задавать вручную в колонке с датой, либо в тексте введя символ @ и указав дату и время уведомления.

Что можно делать, так это создавать формулы, которые в сочетании с фильтрами и сортировкой будут показывать нам то, что нам важно увидеть в этот самый момент времени. Останется только заглядывать на страницу со своими задачами каждый день.


Эта заметка предназначена для продвинутых пользователей, хорошо знакомых с формулами. Если это не про вас, то вам стоит сначала ознакомиться с другими: Знакомство с формулами и Комплексные формулы. Так как необходимость вести учёт повторяющихся задач в Notion - критичная боль для многих, эта страница доступна для копирования. Вы можете перейти к готовому результату и внедрить его в свою систему управления задачами. Учтите, что если вам понадобится внести изменения, придётся вернуться к этой странице и долго разбираться.

Прошу отнестись с уважением к лицензионной политике - вы вольны изменять и распространять мои материалы только безвозмездно.


Помимо обычных атрибутов задач, таких как связи с проектами, комментарии, приоритета и прочих, нам понадобится добавить свойство "Частота пересмотра" и опциональную колонку "N, дней" (на случай, когда цикл должен повторяться каждые несколько дней). Начало цикла совместимо с обычной для задач колонкой с крайним сроком: я назвал её "Дата выполнения".

Чтобы показать отсчёт до повторяющегося события, нужно превратить дату выполнения в грядущую дату повторения, основанную на частоте пересмотра. Искомую переменную я назвал "Ключевая дата". Как обычно, для тестирования нам понадобится временная колонка-замена функции now() с названием "fakenow()".

В процессе пришлось поломать голову : ) Изначально хотел отмечать факт выполнения задачи за счёт изменения времени последней редакции, но отказался от этой идеи предположив, что изменять и дополнять повторяющиеся задачи может понадобиться, а вот просрочивать точно нельзя.

Чтобы получить ключевую дату, нужно узнать сколько полных циклов прошло с момента начала, для этого я воспользовался функцией floor() , округляющей число до целого в меньшую сторону:

floor(dateBetween(prop("fakenow()"), prop("Дата выполнения"), "days") / prop("N, дней"))

Зная число прошедших циклов, можно и грядущую ключевую дату узнать:

dateAdd(prop("Дата выполнения"), floor(dateBetween(prop("fakenow()"), prop("Дата выполнения"), "days") / prop("N, дней") + 1) * prop("N, дней"), "days")

Для получения Ключевой даты (для повторяющихся задач) нужно узнать число дней, недель и месяцев до неё.

Число недель получились из числа дней между Датой выполнения и "fakenow()" делённых на семь. На случай, если до грядущей ключевой даты не целое число недель прибавим единицу.

if(mod(dateBetween(prop("fakenow()"), prop("Дата выполнения"), "days"), 7) == 0, floor(dateBetween(prop("fakenow()"), prop("Дата выполнения"), "days") / 7), floor(dateBetween(prop("fakenow()"), prop("Дата выполнения"), "days") / 7) + 1)

Число месяцев - использовав для функции dateBetween() "months" в качестве аргумента. В зависимости от отношения дня месяца(полученной с помощью функции date()) Даты выполнения к "fakenow()" делаем поправку на один месяц. Обновлено August 9, 2020: так же нужно учесть в формуле случай, когда дата выполнения в будущем и сама должна стать Ключевой датой.