В прошлой статье Obsidian + Dataview: Таблицы я рассказал про установку плагина Dataview, формирование таблиц с его помощью и разобрал 4 кейса его использования.
Dataview - это очень мощный и функциональный плагин, с помощью которого кроме таблиц можно так же формировать списки, календари и задачи.
Сегодня хотелось бы остановиться на задачах, тем более что Dataview позволяет сделать из Обсидиана task/todo-менеджер с календарём и возможностью ставить себе задачи на определённые даты, а затем просматривать выполненные\невыполненные задачи за конкретные дни.
Про исходники
По вопросам из прошлой статьи я понял, что неплохо было бы сразу давать исходники того хранилища по которому написана статья. Чтобы читатели сразу открывали исходник и шли по нему не перепечатывая то, что я уже напечатал. Плюс я думаю, что найдутся такие читатели, которым с исходниками и статья не нужна будет.
Вот сразу ссылка на архив, чтобы можно было скачать, распаковать и открыть обсидианом как хранилище.
Про ошибку Error Fatal
(Скорее всего в углу всплывёт ошибка "Error fatal. not a git repositiry", ткните по ней и работайте дальше, я не смог победить её. Она вылезает из-за того, что я выгружаю всё из тестового хранилища в свой гитхаб, чтобы вы могли быстро скачать, а сам плагин Obsidian-git в только что скачанном хранилище не настроен, пощупать сами исходники эта ошибка не мешает. Если она разражает, то удалите в скачаной базе плагин Obsidian-git).
Как работают задачи в двух словах
В данной статье я не рассказываю как установить плагин Dataview, т.к. уже рассказывал об этом в первой статье.
Задачи так же как и таблицы работают на встроенном языке запросов.
Чтобы отобрать все задачи со всего своего хранилища достаточно в любую заметку вставить следующий код (Если в вашем хранилище Обсидиан много задач, то в код лучше добавить что-то ограничивающее выдачу, например FROM #задачи1 , иначе Обсидиан может долго долго формировать в списке все 100500 задач, которые у вас есть):
```dataview
TASK
FROM #задачи1
```Т.е. должно получиться что-то подобное:

Добавляем параметр к задачам
Предположим мы хотим ввести градацию сложности в каждой задаче.
Для этого в каждую заметку можно дописать соответствующий параметр [сложность:: 1].

Теперь мы можем по этому параметру: группировать, сортировать и отбирать задачи.
Для этого добавляем:
"GROUP BY сложность" - для группировки;
"SORT сложность ASC" - для сортировки (ASC - по возрастанию, DESC - по убыванию);
"WHERE сложность = 1" - для отбора.

Чтобы отобрать только выполненные задачи пишем "WHERE completed":

Чтобы отобрать только невыполненные задачи пишем "WHERE !completed":

Таким образом можно добавить сразу несколько параметров к одной задаче, этими параметрами могут быть:
Контекст - как по GTD (Телефон, Компьютер). И в дальнейшем сделать по заметке на каждый контекст и когда телефонное настроение открывать заметку "Телефон" и перед нами будут все задачи, где от нас требуется сделать звонок, при этом сами задачи могут быть расположены в соответствующих проектах.
Место (Дом, Офис, Торговый центр, Клиент) - и в дальнейшем всё так же как по контексту - можно добавлять к каждой задаче параметр места.
Сложность или трудозатраты - т.е. какая это задача, пятиминутная или часовая?
Добавляем дату к задачам и отбираем задачи на сегодня
Предположим нам надо задавать дату каждой задачи.
Назовём этот параметр [Дата:: 2023-01-23]
Но каждый раз печатать эти 19 символов для каждой задачи - это очень сложно и долго, давайте автоматизируем это.
Ставим плагин QuickAdd, включаем его и идём прописывать хоткеи:
В перво�� поле пишем название нашего хоткея, например "Сегодня", т.е. этот хоткей будет проставлять сегодняшнюю дату.
Во втором выпадающем списке выбираем "Capture".
Потом жмякаем на кнопку "Add Choice".
Затем ткнём на молнию => это добавит данный хоткей в возможность назначения комбинации клавиш в обсидиане.
Затем настраиваем созданный хоткей => жмём на шестерёнку.

В открывшимся окне ставим две галки "Capture to active file" и "Capture format".
Затем в поле "Capture format" пишем следующий текст: ",[Дата:: {{DATE}}]," [[2023-01-23 - Obsidian - Tragic Panda.png]].

Так же можно добавить сразу подобные хоткеи на любые даты и вообще текст, который вам нужен:
",[Дата:: {{DATE:yyyy-MM-DD+1}}]," - данная сточка проставит завтрашнюю дату;
",[Дата:: {{DATE:yyyy-MM-DD-1}}]," - эта вчерашнюю дату;
",[Дата:: {{DATE:yyyy-MM-DD+7}}]," - а эта "через неделю";
Можно добавить все три сложности, что мы раньше создали, для этого в Caprute format пишем ",[сложность:: 1],".
Далее нам надо непосредственно прописать сочетания клавиш нашим хоткеям.
Идём в настройки => Сочетания клавиш => Пишем в поле QuickAdd.
Там видим все наши созданные хоткеи и назначаем им сочетания клавиш.
У меня хоткеи такие: ALT+S - сегодня; ALT+D - завтра; ALT+F - через неделю; ALT+1/2/3 - сложность1/2/3.

Теперь присваиваем всем задачам в проекте даты:

Затем пишем вот такой код (Мы отбираем все задачи с нужным нам тегом, с непустой датой, а так же с датой сегодня и ранее, все незавершённые задачи, группируем их по дате)
```dataview
TASK
FROM #задачи3
WHERE Дата != empty
WHERE Дата <= date(today)
WHERE !completed
GROUP BY Дата
```Должно получиться так (эта заметка - динамичная, т.е. каждый новый день сюда будут добавляться задачи с соответствующими датами, по сути это заметка "СЕГОДНЯ" в todo-листах.

Ну и на конец можно отобрать предстоящих задачи, невыполненные, сгруппированные сразу и по сложности и по дате (внутри скобок list() можно менять местами параметры или добавлять еще), с ограничением выдачи = 3 (За ограничение отвечает строчка LIMIT 3 и в зависимости от её положения в коде при сложных запросах будут разные результаты), т.е. три ближайших задачи, вот он код:
```dataview
TASK
FROM #задачи3
WHERE Дата > date(today)
WHERE !completed
GROUP BY list(сложность, Дата) as abs
SORT abs asc
LIMIT 3
```Вот таким должен быть результат (Я не нашёл способа не дублировать каждую родительскую группировку и выглядит это не очень красиво, но это работает, а это главное)

Добавляем календарь и отбираем задачи на любой день
После того как мы получили возможность отобразить все сегодняшние и предстоящие задачи хотелось бы еще отобразить задачи на конкретный день.
Захотели что-то сделать в обсидиане? Что надо сделать в первую очередь? Правильно - поставить плагин, потом настроить, а потом еще поставить один плагин.
Ставим плагин Calendar, в настройках плагина можно сразу снять галку "Confirm before creating new note".

Затем ставим плагин Templater.
Далее нам надо создать: папку для ежедневных заметок (Daily Notes), папку для шаблонов (Template) и в ней первую заметку-шаблон (Daily Note).

Настраиваем встроенный плагин "Ежедневные заметки", указываем файл шаблона ежедневной заметки (Daily Note), указываем папку, куда будут складываться ежедневные заметки (Daily Notes), настраиваем представление даты: YYYY-MM-DD:

Настраиваем Dataview: Отключаем предупреждение о пустом результате, устанавливаем интервал обновления Dataview (т.е. выполнили задачу на заметке Dataview, через сколько времени представление обновиться и она оттуда пропадёт, значение в милисекундах), указываем формат даты yyyy-MM-dd, ставим галку "Автоматически проставлять параметр [completion:: 2023-01-23]".

Затем идём в файл-шаблон ежедневной заметки (Daily Note) и там пишем заголовок "# Запланированное на сегодня:", а под ним вот такой код (в строчке WHERE отбираются задачи по дате, а дата берётся из названия файла, а файл ежедневной заметки у нас будет называться как раз YYYY-MM-DD):
```dataview
TASK
FROM #задачи4
WHERE Дата = date({{Title}})
WHERE !completed
```В этом же файле пишем заголовок "# Выполненные за сегодня:", а под ним вот такой код:
```dataview
TASK
FROM #задачи4
WHERE completion = date({{Title}})
WHERE completed
```
Теперь берём проект, в котором у нас перечислены задачи с параметром "Дата"

Если мы всё сделали верно или взяли мои исходники, то у нас должно получиться что-то подобное. И в какую дату бы мы не ткнули - у нас создаётся заметка на день, в которой уже есть код Dataview, который отбирает все запланированные и выполненные задачи за этот день.

Заключение
Надеюсь этот гайд поможет вам взглянуть на Обсидиан под другим углом.
Далее в планах раскрыть тему периодических задач через плагины Advanced URI или Tasks.
Не стесняйтесь задавать вопросы, если что-то не получается или не понятно.
Если нашли опечатку в тексте, то выделяйте её и жмите CTRL + Enter и тогда мне в личку прилетит репорт об опечатке.