Как я перепробовал разные методы ведения бюджета и сделал своего бота для учета финансов
Это история из Сообщества. Редакция задала вопросы, бережно отредактировала ее и оформила по стандартам журнала.
Еще будучи школьником, я ощутил потребность в ведении учета своих финансов.
Мои ежедневные траты слишком различались, и нужно было как-то все прогнозировать. Тогда решением стала простая эксель-таблица. Со временем мой подход изменился, и я сделал собственного бота, который помогает следить за бюджетом. В этом материале расскажу, как я к этому пришел.
Первые шаги в области учета расходов
Я родился и до 19 лет жил в Латвии. Учился в средней школе в Риге, жил в 40 километрах от столицы, на природе.
В нашей семье не было принято давать карманные деньги просто так. Деньги от родителей можно было получить, только аргументировав трату, назвав конкретную сумму и причину. Такими расходами могли быть еда и проезд. Я учился далеко от дома, и проезд на автобусе из столицы стоил 1,35—1,90 €. Самую ощутимую сумму можно было получить на праздники, день рождения или Рождество — тут как повезет, обычно дарили 30—50 €, родственников было много.
До 12 класса деньги я получал от отца только на ближайший день:
- 1 €, если день был короткий — только уроки в школе, дорога домой на машине;
- около 3 €, если день длинный — уроки, музыкальная школа и дорога домой на автобусе.
На многое этого не хватало, обычно я мог только чем-то перекусить после школы. Обеды посреди дня в школе были бесплатные.
В 12 классе у меня появилась идея брать у отца деньги сразу на месяц. Тогда он попросил посчитать, какая сумма потребуется, тут я впервые и завел таблицу в «Экселе». Расписание было стабильным, и я мог на месяц вперед достаточно точно знать, когда буду ехать домой на автобусе, а когда — на машине. Получалось порядка 40—50 € на месяц.
Еще я пытался копить, но даже не помню, на что именно: было столько всего, что я хотел себе купить. У меня была большая копилка для мелочи, в ней был счетчик, который точно считал сумму в копилке. Раз в несколько месяцев я отдавал банку маме, ей мелочь нужна была на работе, она меняла мне их на банкноты. Большие суммы накопить не удавалось, покупал себе какие-то ништячки с «Алиэкспресса», например новую мышку или клавиатуру.
Тогда моя таблица представляла собой один лист, сверху я писал сумму, которая у меня была в начале месяца, и затем построчно вписывал даты и суммы трат. В верхней части отображался актуальный остаток — сумма, которая была в начале периода, минус все расходы за это время. Таблица помогала вести учет трат, чтобы под конец месяца не остаться без денег, а в лучшем случае даже что-то сэкономить.
То, к чему я пришел сейчас, далеко от такого формата, но всегда приятно вспомнить, с чего все начиналось.
Как я начал пользоваться приложениями для учета бюджета
Поступив в университет в России, я остался наедине со своими финансами. Нужно было оплачивать все самостоятельно — от общежития до хлеба в магазине. К этому моменту я уже перестал вести таблицу и был уверен, что спокойно смогу тратить мало, так, чтобы у меня еще оставалось, но оказался не прав.
Я старался максимально растянуть свои траты, но без ведения учета все равно создавалось впечатление, что деньги просто исчезали, а я при этом прошу у родителей огромную сумму в пересчете на месяц. К тому же не очень приятно было видеть у себя на счетах маленькие суммы: казалось, вот вдруг что случится, а денег нет.
Гораздо приятнее видеть даже 20 тысяч рублей, отложенные на черный день.
В итоге мы с родителями снова договорились, что я буду получать деньги раз в месяц, от меня требовалось посчитать сумму. Помню, насчитал 16—18 тысяч рублей, тогда это было 230 €. Сейчас, конечно, удивлен, как мне хватало такой суммы, но я жил в общежитии и получал стипендию в размере 2 тысяч рублей, а тратил в основном на еду.
Мне нужно было точно знать, сколько денег необходимо ежемесячно, и я перешел к более современным, как мне тогда казалось, способам ведения бюджета. Я начал пробовать разные приложения для смартфона. Долгое время пользовался 1Money, где все траты надо было вводить вручную. Выбрал это приложение, так как мне нравился дизайн, ну и друг посоветовал. Было удобно: вместо того, чтобы открывать таблицу на компьютере, можно было быстро зайти в приложение и сразу добавить транзакцию.
Со временем мне это наскучило, я захотел что-то более функциональное — с возможностью автоматического добавления операций. То есть чтобы при трате с карты приложение само понимало, откуда и сколько было потрачено, и добавляло соответствующие данные. Тогда мне это казалось суперудобным, именно тем, что мне давно было нужно, но как же я ошибался.
Проанализировав разные варианты, я остановился на ZenMoney. Почитал отзывы, убедился, что людям нравится, и начал пользоваться. В целом обычное приложение для учета финансов, но с автоматизацией. Вместо ручного добавления счетов нужно подключить банк, и тогда все операции будут добавляться после обновления раз в какое-то время. Мне также очень нравилось, что оно работает с большим количеством банков, в том числе и европейских.
Опасения насчет безопасности данных у меня были, но я почему-то доверял команде. Ведь если бы они хоть раз украли чью-то копейку, то их репутация была бы разрушена. К тому же впоследствии я отметил вовлеченность разработчиков: у меня возникали разные технические сложности при подключении некоторых банков, но они старались помочь и решить проблему, пусть и не очень торопливо.
Позже я немного разобрался, как именно работает приложение. Суть в том, что оно использует самописные плагины, которые имитируют приложение того или иного банка. Например, когда в ZenMoney обновляется баланс Сбера, программа делает вид, будто вы вошли в официальное приложение банка и обновили баланс там. Сами плагины доступны в виде исходного кода на GitHub, так что вы можете написать что-то свое и использовать их для подключения к банкам.
Почему я потерял интерес к приложениям
Какое-то время я пользовался приложениями и бед не знал. Вернее, знал: с некоторыми банками приложение долгое время отказывалось работать корректно, например с Revolut. Несмотря на это, я даже купил платную функциональность. Но со временем столкнулся с проблемами, после которых навсегда забыл о подобных приложениях.
Первым звоночком стала потеря интереса к отслеживанию расходов. Действительно, зачем вообще вести учет и досконально следить за деньгами, когда все делается само? Если вначале я заходил в приложение раз в день — поправить категории добавленных трат или добавить QR-код чека, — то через пару месяцев почти полностью забил и заходил раз в месяц, только чтобы посмотреть статистику, которая, к слову, была бедна. Приложения не дают вам никакой свободы обработки данных, максимум, что вы можете, — это посмотреть график распределения трат по категориям и еще какие-нибудь диаграммы.
Второй проблемой стал вопрос хранения данных. Да, в приложение можно зайти с разных устройств через почту, и вроде даже где-то там была кнопка экспорта в CSV, так что я всегда могу получить свои данные. Но, как оказалось, не тут-то было.
Приспичило мне сменить свой основной гугл-аккаунт, и надо было перенести все данные. А что делать, если я заходил в приложение со старого аккаунта, а теперь надо перевести все в новый? Поддержка не ответила, и я решил экспортировать данные и импортировать их снова. Каково же было мое удивление, когда приложение, из которого я все экспортировал, не могло понять эти же данные при импорте. Тут я подумал, что пора все менять.
Создание собственного бота
Желание самостоятельно следить за процессом побудило меня найти новое решение. Возвращаться в старое приложение не хотелось: сколько еще раз я буду менять приложения и каждый раз начинать историю операций заново? Данные, конечно, можно экспортировать, но не всегда они легко и быстро импортируются в другое приложение. Поэтому переход на гугл-таблицу для меня был очевиден: данные всегда будут в одном формате и в одном месте.
Так уж сложилось, что в тот момент я уже слушал подкаст Т—Ж, — рекомендую. Там я услышал мнение, что многие ведут учет своих финансов именно в таблицах, хотя мне на тот момент казалось это не очень удобным. С телефона вносить данные неудобно — на компьютере, что ли, по вечерам клетки заполнять? Ну нет. Встал вопрос, как быстро вносить их в таблицу и с телефона, и с компьютера. И тут я вспомнил про телеграм-ботов.
Меня не интересовали готовые решения — я начинающий программист и хотел пополнить свое портфолио каким-нибудь ботом на Python. Но прежде чем приступить к делу, я все же ознакомился с наработками других разработчиков. Находил всякое, чаще всего кто-то делал очень простого бота, данные в которого заносятся при помощи команд. Да и оформлено все было как «проект по разработке». Пользоваться можно, но, пожалуйста, сам установи, сам запусти и поддерживай бота. Они предлагали только исходный код и инструкцию по запуску. Это было не то.
Так я начал работу над ботом, который отвечал бы именно моим запросам и одновременно был бы продуктом для пользователей. Мой код также общедоступен, но только для ознакомления, я не предлагаю инструкций по развертыванию такого же бота на ваших вычислительных машинах.
Основная мысль, вокруг которой крутилась идея и которую я впоследствии реализовал, — это кнопки с названиями всех категорий и счетов. Вы вносите их в таблицу однократно, и каждый раз при добавлении нового расхода бот сам будет предлагать соответствующие кнопки. Еще я хотел сделать крутой интерфейс, насколько это было возможно. Получилось отлично: единственное, что нужно вводить с клавиатуры, — это цифры, сумма транзакции. Все остальные команды можно выбрать из меню.
Разобравшись в написании ботов и работе с «Гугл-таблицами», я пришел к такому варианту:
- Гугл-таблица, в которой один раз надо произвести настройку, добавить счета, категории, настроить форматы валют.
- Бот используется не только для добавления записей о транзакциях на отдельный лист, но и для получения данных из таблицы — например, об остатке на счетах или категориях.
- Категории и счета представлены в виде кнопок.
Как воспользоваться ботом
Бот называется Telexpense. Он написан на языке Python с использованием асинхронной библиотеки Aiogram. Выбор библиотеки был обусловлен наличием большого количества обучающих материалов, тогда это мне было очень нужно. Для добавления данных в таблицу я использовал Google Sheets API, воспользовался ее оберткой в Python gspread. База данных очень маленькая, храню только id пользователей и id их таблиц.
Ботом может пользоваться любой человек. Для этого нужно:
- Найти бота в «Телеграме» и написать ему.
- Скопировать специальный шаблон таблицы, с которым работает бот.
- Добавить в таблицу почту бота в качестве редактора.
- Отправить боту ссылку на таблицу, чтобы он вас запомнил.
- Настроить таблицу по своему вкусу — добавить счета, указать валюту, внести категории доходов и расходов, отметить, является ли счет сберегательным. Это требуется для статистики распределения бюджета, чтобы бот понимал, какие деньги «текущие», а какие — «сбережения».
Я снабдил все шаги добавления таблицы небольшими видео, которые помогут разобраться тем, кто запутался.
При добавлении операций ваш текущий баланс считается так: берется сумма счета, которую вы указали при настройке таблицы, и отнимается сумма всех транзакций, которые вы добавили.
Пример операции:
- вы нажимаете кнопку «Расход», чтобы добавить новую трату;
- бот спрашивает сумму операции;
- вы вводите сумму, например «200»;
- бот спрашивает категорию расхода, предлагая кнопки с названиями категорий из вашей таблицы;
- вы выбираете нужную категорию;
- бот спрашивает счет расхода, предлагая кнопки с названиями счетов из вашей таблицы;
- вы выбираете счет;
- бот говорит, что все добавлено, и в вашей таблице на листе с транзакциями в самом верху появляется строка с новой операцией.
Можно также удалять последнюю добавленную операцию и менять формат отображения валюты в таблице.
Бот создавался как учебный проект: навыки у меня были, но я решил расширить знания курсами по Python. Технически проект реализован, честно говоря, коряво. Сейчас я уже нашел работу в смежной сфере и потому думаю полностью переписать бота, повысив стабильность работы и читаемость кода. В будущих версиях также хочу сделать еще более понятный интерфейс и более подробную инструкцию, чтобы у пользователей было больше свободы в работе с таблицей.
Итоги и планы
Теперь я решил все проблемы, связанные с учетом финансов:
- Данные хранятся в таблице, в облаке в моем аккаунте. Бот выступает только как интерфейс взаимодействия.
- Я всегда могу перенести свои данные в другую таблицу или аккаунт.
- Могу строить любые графики на основе данных, которые добавляю.
- Добавляю данные вручную, не теряя интереса и внимания.
- У сторонних приложений больше нет доступа к моим банкам.
Планы развития бота:
- У меня появилось много знаний и опыта в области разработки ботов, поэтому в первую очередь думаю подлатать всю техническую часть в целом.
- Сейчас главный план — пересмотреть работу бота и ускорить его. Постараюсь ускорить работу с таблицами пользователей и увеличить количество запросов, которые бот может обработать за единицу времени.
- Я получил много обращений, в которых люди просят добавить разную функциональность, например русский язык. Изначально бот был только на английском.
- Хочу переделать шаблон таблицы, сделать ее еще понятнее и дать пользователям больше возможностей для редактирования и адаптирования ее под свои нужды. Пока главное, чего мне не хватает в таблице, — это подкатегории. Чтобы подкатегорию «Продукты» можно было положить в категорию «Еда», например.
- Планирую внедрить более глубокую поддержку криптовалют.
Буду рад получить обратную связь по работе бота. Пишите комментарии — буду их читать.