Финансы Maria An
1 477

Как построить управленческий учёт просто и бесплатно: опыт Kiwitaxi

Финансовый директор Kiwitaxi Виталий Михайлов подробно рассказал и показал на примерах, как организовать управленческий учёт в Google Sheets.

В закладки

В прошлом я был руководителем отдела анализа и отчётности в самостоятельном региональном банке, заместителем финансового директора Tanki Online, финансовым директоров ClickAvia.

За свою карьеру я испробовал принципиально разные инструменты для ведения управленческого учёта: cамописные платформы на базе АБС (автоматизированной банковской системы), использующей MSSQL, 1С, Excel+VBA, MS Dynamics CRM, MS Dynamics NAV. В итоге в Kiwitaxi я остановился на обычном Google Sheets.

В чём преимущества Google Sheets

  • Бесплатность.
  • Предельно понятный интерфейс.
  • Многопользовательность и облачность.
  • Возможность создавать сложные формулы, настраивать фильтры.
  • Особенность для продвинутых — Google Apps Script (аналог VBA в Excel).

Я не утверждаю, что это идеальное решение. Но я убеждён, что если вы пока не способны поставить учёт на таком уровне, то до ERP-систем ещё расти и расти.

На успешное использование ERP влияет много факторов: качество поставляемых данных, организационные и технические проблемы, завышенные ожидания руководства, так как стоимость внедрения систем высока.

Как работать в Google Sheets

Файл-образец.

Журнал проводок и отчёт о движении денежных средств (ОДДС)

Вкладка «БанкСчёт»

Основой учёта является журнал проводок, в котором отражаются все происходящие транзакции. Логичнее всего начать с самого простого — учёта движения денежных средств.

Для этого создаём вкладку «БанкСчет», которая и будет являться журналом проводок для движений по банковскому счёту. Минимальный набор полей:

  • дата;
  • сумма операции;
  • остаток;
  • статья.

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

В «Справочник» заводятся все статьи расходов или движения денежных средств (ДДС). Они нам потребуются для формирования отчётности. Задать выпадающий список выбора статей можно через стандартную процедуру «Данные — Проверка данных»:

Так формируется выпадающий список статей
Пример готового журнала проводок за первые пять дней июня

Вкладка «Хостинг»

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

Назовем счёт (вкладку) «Хостинг».

Обратите внимание, что 5 июня произошла частичная оплата счёта (частичное погашение обязательств)

Имея счёта активов («БанкСчёт») и обязательств («Хостинг») мы уже можем сформировать простейший «Баланс» и посчитать капитал нашего предприятия:

Как мы видим, прибыль 5 июня не изменилась по отношению к 4 июня, так как произошло одновременно уменьшение актива и обязательств

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

Отчёт о финансовых результатах (ОФР) и сверка

Теперь сформируем ОФР.

У ОФР точно такая же фишка, как и у баланса: он формируется автоматически (если пользоваться моими формулами) — вам нужно лишь задать верные даты вверху

Для контроля рассчитанных значений прибыли необходимо добавить сверку.

Прибыль за период в ОФР равно прирост прибыли в балансе за этот же период.

Сформируем ОДДС.

Аналогично прибыль за период в ОДДС равно прирост прибыли в балансе за этот же период

Чем отличается ОФР от ОДДС

Принципиальное отличие ОФР от ОДДС в том, что в ОФР учитываются расходы по методу «начисления», а в ОДДС движение денег происходит по «кассовому» методу. В этом примере я наглядно показал, что по методу «начисления» расходы составили 2000 рублей, а по «кассовому» (оплате) — 1000 рублей.

При этом важно понимать, что никто не мешает вести управленческий учёт только по «кассовому» методу. Тогда потребность в ОДДС отпадёт (ввиду совпадения с ОФР), но при этом возникнут неточности управленческого учёта, связанные с дебиторкой и кредиторкой, потому что «кассовый метод» не отражает их в учёте, а в реальности они существуют.

Углубимся в этот нюанс.

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

Кредиторка (К) — это, наоборот, ваши обязательства перед кем-то (его дебиторка).

При погашении дебиторки или кредиторки изменение прибыли не происходит, так как один актив замещается другим (дебиторка деньгами), либо одновременно уходят актив (деньги) и обязательство.

В моей модели Д и К можно учитывать двумя путями.

  • Завести отдельный счёт учёта («Хостинг»). Но тогда нужен поставщик данных для журнала проводок, например, выписка по балансу в вашей хостинг-админке.
  • Учитывать только остаток Д или К напрямую в балансе в случаях, когда у вас нет выписки по балансу, но есть накопленная сумма Д и К на заданную дату.

Во втором случае нужно ввести в баланс два балансовых счёта (без создания счетов учёта в отдельных вкладках).

  • Процессинг (Д). Задолженность банка при оплате картой.
  • Зарплата (К). Начисленная зарплата.
Баланс с дебиторкой и кредиторкой

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

ОФР без корректировки

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

Итоговый ОФР

Полезные советы

  • Разделяйте счета по исполнителям и назначайте индивидуальные права на вкладки.
  • Делайте бэкапы регулярно.
  • Группируйте суммы в журнале проводок для одной даты и статьи либо автоматизируйте импорт данных.
  • Разберитесь с формулами, чтобы редактировать их под свои нужды.
  • Всегда проверяйте контрольные точки (ОФР и ОДДС с балансом) для валидации данных.
  • В случае мультивалютного учёта лучше разводить отчётность по разным валютам и сводить к эквиваленту итоговые показатели, чем делать универсальный отчёт в эквиваленте — замучаетесь выводить валютные риски или колебания.

Сейчас я продолжаю использовать Google Sheets в рабочих процессах Kiwitaxi, правда, уже на десятки различных счетов, несколько компаний и в мультивалютном режиме. Ни одна из систем, которые я встречал, не могла предложить мне такой исключительной гибкости.

#кейс #финансы

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Maria An", "author_type": "self", "tags": ["\u0444\u0438\u043d\u0430\u043d\u0441\u044b","\u043a\u0435\u0439\u0441"], "comments": 3, "likes": 12, "favorites": 1, "is_advertisement": false, "subsite_label": "finance", "id": 40006, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15388' + '59599') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 40006, "author_id": 85409, "diff_limit": 1000, "urls": {"diff":"\/comments\/40006\/get","add":"\/comments\/40006\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/40006"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199119 }

3 комментария 3 комм.

Популярные

По порядку

1

Виталий, крутой мануал!

Ответить
0

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

Ответить
0

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

Ответить

Комментарий удален

Комментарий удален

0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Приложение-плацебо скачали
больше миллиона раз
Подписаться на push-уведомления