среда, июня 29, 2011

Ещё одна домашняя бухгалтерия на Google Docs

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

Прежде всего всё что написано не мою - написано другим. Это очевидно. Но следствие из этого - это другой разрабатывал логику, исходя из собственных представлений об удобстве и функционале. А значит нет уверенности в том что чужие представления на 100% совпадут с моими. На хабре эта тема уже звучала, а вот именно тот пост, который подтолкнул меня к собственному "велосипеду".

Второй важный момент - если системой будут пользоваться двое (не говоря уже о большем количестве), то вероятность ошибок возрастает многократно. Многие системы подразумевали наличие счёта, отображающего количество денег в кошельке. Ах, как мне нравилась программа GnuCash... Но каждый месяц я должен был добавлять транзакции для корректировки счета по кошельку жены. И на что она тратила деньги оставалось только догадываться потому как сама она не могла вспомнить, а чеки благополучно терялись.

Исходя из вышеописанных проблем я породил ещё одну домашнюю бухгалтерию на Google Docs. Методом проб и ошибок, анализируя чужие решения и исходя из собственных потребностей я пришёл к следующим выводам.

Система должна быть максимально проста. Проста на столько что бы при объяснении как ею пользоваться мне не заявили - "не держи меня за дуру".

Акцент системы - сколько и на что потрачено. Мне не важно сколько сейчас денег у меня на карте, в кошельке или дома под подушкой (хотя знать это было очень удобно). Важно - сколько потрачено в магазине, на кредиты и так далее.

Следующее - должен быть контроль за обязательными платежами. Квартплата, кредит, интеренет - нужно оплачивать каждый месяц. Плюс иногда возникают другие платежи, которые надо обязательно сделать, но в следующем месяце их не будет, например заказать корм собаке.

И последнее - структура платежей должна быть максимально простой. Для себя я определил что платёж имеет три параметра. Первое - направление (доход или расход). Второе - категория. Магазин, кредит, счета, развлечение и так далее. Всего получилось около восьми пунктов. И третье - подкатегория. Или лучше сказать - комментарий. Например, платёж на сумму 3 000 рублей может иметь следующие параметры: Расход, Магазин, Ашан. То есть третьим пунктом, в произвольной, но максимально короткой форме, описываю где были потрачены или от куда получены деньги.

Теперь от теории к практике.

В гугло-документах у меня создана коллекция - Бюджет. К ней относятся таблицы, куда заношу данные. Каждый файл таблицы имеет название - месяц за который ведутся данные. Что бы определиться с годом, к которому относится данный месяц - файлу прикрепляется коллекция, с годом. Выглядит это так:
image

Каждый файл содержит три вкладки. Основаная - Факт. Это и есть история всех трат и поступлений в указанном месяце. Например вот так:
Файл бюджета на месяц

Каждый месяц создаю новый файл. И перво наперво добавляю записи с направлением "Собственные средства". Не указывал выше наличие такого направления потому что он используется только один раз в начале месяца. Так я отмечаю сколько денег имеется в распоряжении на начало месяца.

Так же сразу же, для обязательных в этом месяце трат, добавляю строчки с отметкой что данные не подтверждены (для них столбец F содержит значение Нет). Например, если надо до 10-го июня заплатить за интернет, то добавляю строку с датой 10 июня, сумма - 500 р., направление - расход, категория - счета, комментарий - интернет и подтверждено - нет.

Дальше всё как обычно - траты или получение денег заношу в таблицу, а если была выполнена операция, которая уже была запланирована (оплатил таки интернет, например) то корректирую нужная строчка (меняю дату и сумму, если нужно, и меняем подтверждено на Да)

Но простое накопление данных не особо интересно. Как отмечал выше - мне важно знать на что и сколько потрачено. Раньше пытался сделать подобную аналитику, использую уникальные значения из колонки Категория, но с недавних пор Google предлагает инструмент для формирования сводной таблицы. Благодаря ему моя система учёта получила второе дыхание (так как собственный костыль аналитики существенно усложнял использование).

Сводная таблица находится на отдельном листе - Сводная таблица. Создаётся она очень просто:
Создание сводной таблицы

Но только что созданная таблица нуждается в доработке.

Во-первых через Edit range указываю диапазон данных - все столбцы с A по F.

Второе - для рядов указываю группировку по двум полям - Дата и Комментарий. Таким образом я получаю визуальное представление о том сколько и на что потрачено в тот или иной день. Группировке по дате указываю необходимость показа общей суммы. Это позволяет видеть внизу таблицы итоговые суммы.

Третье - группировка колонок. Тут группирую по Направлению и Категории. Направлению отмечаю Show totals. Данная отметка, на самом деле, не является необходимой, но с ней нужно выполнят на одно действие меньше если нужно посмотреть соотношение расходов и доходов. В противном случае пришлось бы выделять последнюю строчку таблицы и смотреть сумму.

Дальше - в Value указываю поле Сумма и операцию - SUM.

И последнее - фильтры. Тут два фильтра. Первый по Категории - все категории кроме Собственные средства. В принципе можно сделать его по Направлению - учитывать только направления Доход и Расход. Второй фильтр - Подтверждено. Интересуют только записи, которые действительно имели место быть. Если какая-то запись только запланирована, то в сводной таблице её не должно быть.

В конечном итоге моя сводная таблица принимает следующий вид:
Финальный вариант сводной таблицы

Но сейчас я отказываюсь от последнего фильтра - того что по колонке Подтверждено. Вместо этого значение данного столбца используется как самая первая группировка в разделе Columns. Благодаря этому сводная таблица делится на две части. Первая с проведёнными тратами и доходами, вторая - с запланированными. Таблица получается в два раза шире и по этому лучше использовать заморозку первых трёх рядов и первых двух колонок. Тогда при прокручивании таблицы всегда будет видна дата, подкатегория, а так же категория.

В этом случае таблица выглядит таким образом:
Второй вариант сводной таблицы

Самое интересное в сводной таблице - нижняя строчка. Благодаря группировкам и подсчёту сумм в ней выделяется две области - сумма доходов и сумма расходов. Причём сразу отображается сумма по катогориям.

После очередного переосмысления структуры бюджета я решил добавить третий лист - План. Над этим листом пришлось потрудиться и скорее всего текущий вариант будет ни один раз изменён. Данные на этот лист поступают из двух источников. Первый - колонка Катогория с листа Факт, второй - ручной ввод цифр.

Было бы очень неудобно каждый месяц руками забивать все категории. Можно что-то упустить или сделать орфографическую ошибку. Поэтому данные первой колонки заполняются автоматически благодаря следующей формуле в ячейке A2:
=UNIQUE(FILTER('Факт'!D:D;'Факт'!C:C="Расход"))
Функция UNIQUE берёт только уникальные значения из списка, который возвращает функция FILTER. Функция FILTER возвращает только те значения из колонки D листа Факт (Категория), Направление которых (колонка C) - Расход. То есть на данный момент я планируют только расходы причём сразу по всей Категории. Планирование 7 000 рублей на ЖКХ и 500 р. на оплату электричества мне кажется избыточным - проще сразу запланировать 7 500 рублей на оплату Счетов.

После того как Google Docs сформировал список запланированных категорий нужно подсчитать фактический расход по ним. Это делается тоже формулой:
=SUM(FILTER('Факт'!B:B;'Факт'!C:C="Расход";'Факт'!D:D=A2))
Знакомая функция FILTER ищет в колонке Сумма только те значения Направление которых - Расход, а Категория равна указанной на листе План. Передача результата этой функции в SUM даёт фактическую сумму по категории. Фильтрация по направлению очень важна так как, например, у меня есть категория "Накопления" как для направления "Расход" так и для "Собственные средства".

Дальше в колонку План вношу сумму, заложенную по категории на месяц. Причём число должно быть отрицательным.

Колонки Дельта считаются по очень простым формулам, но нуждаются в некотором пояснении.

Колонка D:
=B2-C2

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

Колонка E - процент от плана. Это колонка, по сути, малоинформативна и просто для тех кто любит проценты. Я использую такую формулу:
=(B2/C2)-1
-100% говорят о том что план полностью провален. То есть по Категории не было запланировано ничего, но траты были.

Получаю что-то на подобии вот этого:
Запланированные категории

На этом пока всё. Если есть желание использовать именно такой подход, то лист есть в шаблонах Google Docs - шаблон для использования.

Плюс моего подхода - он очень прост (как мне кажется). Всё что нужно - в начале месяца указать сколько денег имеется в наличии, а потом просто заносить траты. Причём. Указывание собственных средств, на самом деле, задел на будущее. То есть, по большому счёту, это можно и не указывать. Мне это нужно только для контроля того на что копятся деньги. Другими словами мне важно знать сколько уже отложено на учёбу, например.

Таблицу можно расшарить и дать доступ всем членам семьи. А так как деньги тратятся или получаются не в какой-то счёт, то им не нужно указывать что потрачено столько то из кошелька мамы. Это упрощает систему, а так же избавляет от головной боли когда по данным в кошельке должно быть сто рублей, а по факту их там 50.

Гуглотаблицы доступны, практически везде, а это мобильность. Находясь в отпуске можно зайти в документы и добавить соответствующую трату. Конечно, это роуминг, в самом плохом случае... Но как другая мера - на время отсутствия вносить данные непосредственно в телефон (или записывать в тетрадь), а потом перебить их в таблицу.

Ещё одна идея дальнейшего развития - подключить к таблице форму. Таким образом можно избавиться от лишнего траффика при добавлении данных. Правда есть небольшая сложность. При вносе данных непосредственно в таблицу можно, что называется, на лету создать новую категорию. При добавлении через форму категорию лучше представить в виде выпадающего списка. Правда это тоже решаемо. Например список категорий и поле ввода. Но тогда, видимо, понадобится ещё один лист, с "сырыми" данным, а затем выводить их на лист Факт, сложив категории из списка и поля ввода новой.

Если же вернуться к самому началу статьи, то виден самый большой минус системы - она решает конкретно мои задачи. Я не знаю и не могу знать какие требования к учёту финансов есть у Вас. Возможно Вам нужен лист с планированием бюджета. Или требуется более специфичная обработка данных. Поэтому, возможно, посмотрев на мои изыски Вы скажете - фу, какая гадость. Но лично мне изложенный подход подходит на все 100%. В нём только тот функционал, который мне нужен, но не ограничивает возможность расширения.

Собственно на этом всё. Спасибо.