В какой-то момент понял, что мне нужно вести учет расходов. Я попробовал много разных программ на Android для ведения учета, но так и не нашел для себя подходящую. Как мне кажется, основная проблема всех программ, что они довольно простые: если пришли деньги на счет, это доход, если списались деньги со счета, это расход. А в жизни все сильно сложнее. В итоге я решил написать свою программу на мобильной платформе. Старался, чтобы в моей программе можно было отразить любую финансовую операцию обычного человека, даже довольно сложную: вплоть до того, что я купил стол за 1000 рублей, продал его за 2000 рублей и в доходах отразился просто доход 1000р. Чтобы когда мне выставляют счет за интернет, я сразу мог его зафиксировать, становясь должником. Постоянно что-то дорабатывал и переделывал, т.к. всегда менялись желания и находились недостатки в том или ином способе решения. Со временем я выработал для себя наиболее подходящую методику учета.
Скачать и посмотреть программу можно по ссылке https://play.google.com/store/apps/details?id=com.dds.moneylab
Вот основные особенности, которых мне не хватало в других программах:
#1. Дополнительное поле Товар/Услуга
Самое главное, что я понял в учете: не так важно, на что ты тратишь деньги, главное это для чего ты тратишь деньги. Например, при покупке тортика, у вас могут быть совершенно разные мотивы:
1.Вы идете в гости к другу и купили тортик, чтобы не с пустыми руками приходить.
2.Или сегодня ваш день рождения и вы купили тортик на работу, т.к. там так принято.
3.Или вы купили его себе, чтобы просто поесть.В первом случае расходы можно списать на статью «Развлечения/Отдых/Друзья», во втором случае, это «Работа», а в третьем это «Еда». Разные статьи расходов, но товар один и тот же. Я решил фиксировать в своей программе и статью, и товар.
Статья доходов/расходов – отвечает на вопрос: для чего я трачу деньги?
Товар/Услуга – отвечает на вопрос: на что я трачу деньги?
Это позволяет на одну статью расходов записывать разные фактические расходы. И одинаковые фактические расходы разносить по разным статьям.
Еще я понял, что статей расходов должно быть максимум 15-20 штук, и они должны очень редко добавляться и изменяться. Добавиться они могут только с сильными изменениями в образе жизни, например, родились дети. Редко они должны меняться, так как нам нужно сравнивать расходы по одной и той же статье, а если у вас каждый раз они другие, то сравнивать будет невозможно.
Со временем для себя выделил такие статьи:
Личные:
1. Заработок основной - это основное место работы программистом и подработка программированием. Сюда же заношу расходы на подарки коллегам на дни рождения и доходы, когда они мне дарят. Если я на работу езжу на такси или каршеринге, то тоже заношу сюда.
2. Заработок прочее - это депозиты, инвестиции, кешбек и т.д.
3. Разовые траты - Это одежда, бытовая техника, телефоны, одежда и т.д.
4. Регулярные траты - Коммунальные услуги, Аренда квартиры, Интернет и сотовая связь, Стрижка, СМС информирование банков и т.д.
5. Еда - это продукты питания для дома. И сопутствующие расходы на доставку еды до дома: такси, аренда парковки, каршеринг или оплата курьеру.
6. Еда на работе - в основном это столовые и кафе, кофейня внизу офиса, или просто продукты в магазине, которые я покупаю для того что бы поесть на работе.
7. Здоровье и фитнес - все расходы на врачей и на спорт. Анализы, лечебный массаж, зубные врачи, абонемент в спортзал, витамины, одежда для спорта.
8. Обслуживание автомобиля - все расходы на авто, запчасти, сервис. Бывает, что за автомобилем в сервис я езжу на каршеринге, его тоже сюда добавляю.
9. Отдых и развлечения - это все, что я трачу для отдыха для себя. Кинотеатр, фильмы в онлайн кинотеатрах, кафе, билеты на самолет в путешествие, экскурсии, бензин если еду в автопутешествие.
10. Транспорт - это все расходы на транспорт, который сложно классифицировать, например абонемент на метро. Бензин для авто, на котором регулярно езжу.
Расходы на других людей:
11. Девушка - это расходы на мою любимую, например подарки и цветы девушке, сходить в ее любимый ресторан, в который я бы не пошел один
12. Родители - Переводы денег родителям, покупка им бытовой техники или оплаты их счетов.
13. Друзья - Очень редко, моим друзьям требуется помощь, и тогда расходы записываю сюда. Если мне друзья помогут, то я тоже сюда их занесу.
14. Пожертвования - Перечисления в благотворительные фонд, которые я иногда делаю или просто дам денег бродяге или музыканту, хотя я редко это делаю.
В других программах, которые состоят только из одного поля аналитики "Статья", становится сложно учитывать и вспоминать, для чего и на что тратил деньги.
#2. Статьи учета не делятся на доходные и расходные.
Например: Я ездил на каршеринге до работы, потратив 356,8р. Это расходная операция. Потом мне выплатили зарплату 100 000 руб. Это доходная операция. Обе операции по статье "Заработок". В итоге я вижу, сколько всего заработал. (Картинка 3 это итог в отчете по статье Заработок. Картинка 4 это расшифровка отчета)
#3. Списание денег это не всегда расход. Поступление денег, это не всегда доход.
Я добавил возможность в своей программе компенсировать расход, который я оплатил.
Пример: Сидим в кафе с друзьями. В конце встречи, я решил оплатить весь счет на 2869р с карты Сбербанка. Друзья переводят мне деньги по 1000р., один на Альфабанк, другой дал наличными. Сумма которую я оплатил 2869р, это не реальный расход. А суммы, которые мне переводят друзья, это не доход.
Как я буду эту ситуацию отражать в программе:
1. Я завожу расход на 2869р. Потом нажимаю на кнопку "Компенсировать покупку"(рис. 1)
2. Открывается форма "Компенсация расхода", где я заполняю суммы перевода и кошелек. Контрагента можно не указывать, но всегда заполняю, мне так удобнее. Жмем кнопку ОК(рис. 2).
3. После можно посмотреть, что создались расход и два дохода. В отчете итог этих операций будет выглядеть, как на скриншоте справа.
В других программах такая ситуация обычно отражается довольно сложно: Нужно внести расход на сумму, которую нужно будет самостоятельно рассчитать 2869р-1000р-1000р = 869р. Потом сделать перевод с Сбербанка на Альфабанк на 1000р и сделать еще один перевод с Сбербанка на Кошелек 1000р.
У меня это работает с помощью механизма продажи товаров, который у себя реализовал: В доходной операции можно указать товар, который приобретался ранее. Появится поле Сумма покупки, которая заполнится автоматически суммой покупки. Если вам нужно продать только половину, то уменьшите сумму покупки.
С основными особенностями я закончил, дальше кратко перечислю остальные фишки программы:
1. Добавил в операцию поле Контрагент(Покупатель/Продавец). Вначале я это сделал, чтобы вспомнить, где я потратил деньги. Т.к. бывает, смотришь в отчет: потратил 1200 в кафе. Но никак не можешь вспомнить, что это было. А когда видишь Контрагента, сразу вспоминаешь. Вообще мой мозг чаще запоминает места, где я тратил, а не абстрактные расходы. Потом я сделал, чтобы при выборе контрагента реквизиты Кошелек, Статья, Товар заполнялись данными из прошлой операции. Как оказалось, это очень удобно, т.к. ускорило ввод операции и уже не нужно думать, чем заполнять операцию. В 90% случаев они повторяются.
2.Можно указать несколько строк в одной операции. Например, вы купили в супермаркете продукты питания и подарки. Так удобнее сверяться с банковской выпиской: одна операция = одна банковская транзакция.
3. Сделал, чтобы можно было получать или отдавать товары/услуги в долг. Например, если вы вернули товар в магазин, деньги к вам приходят не сразу. Т.е. до зачисления денег, вам должен магазин. И чтобы это не забыть, вы можете отгрузить товары в долг магазину. А когда фактически поступят деньги, вы отражаете погашение долга. В моей программе есть учет взаиморасчетов с контрагентами. Где вы можете отгружать или получать различную номенклатуру контрагентам, уменьшая и увеличивая задолженность.
4. Сделал, чтобы валюта списывалась по среднему курсу ее покупки. Это удобно, когда покупаешь регулярно валюту, и средний курс сильно отличается от текущего. В итоге в отчетах отражается сумма в рублях, которую реально потратил.
5. Добавил метки в операции. С их помощь удобно собирать все расходы в путешествии, чтобы всегда можно было посмотреть, на что и сколько тратил. Раньше я под каждое путешествие создавал свою статью "Путешествие в Тайланд", "Путешествие в Калугу". После добавления меток я стал все расходы распределять как обычно: Билеты на на статью "Развлечения", расходы на еду на статью "Еда" итд. И все расходы помечал метками "Путешествие в Лосанжелес" или "Путешествие в Нижний Новгород".
С особенностями я закончил. Остальное у меня, так же как и у всех:
Журнал операций
Список с остатками денег на кошельках:
Страничка с текущим состоянием. Фактически это одна длинная страница, которую нужно пролистывать, для этой статьи разделил на два скриншота.
В итоге получилась программа с большим количеством аналитики (статьи, товары, контрагенты, метки), в которой можно легко отразить любую операцию. С демонстрацией я закончил.
Кратко расскажу, как устроена программа архитектурно: Я создал базовые операции: Поступление товаров(+образует наш долг), Списание товаров(+образует долг контрагента), Поступление денег(+образует наш долг), Списание денег(+образует долг контрагента), Списание товаров на расход, Поступление денег на прибыль, Перемещение денег.
Комбинируя эти операции, можно получить любую реальную операцию. Например, документ Расход состоит из Поступление товаров(+образует наш долг), Списание денег(+закрывает наш долг) и Списание товаров на расход. Операция "Расход в долг" это Поступление товаров(+образует наш долг), Списание товаров на расход.
Изначально у меня операции Доход и Расход назывались Покупка и Продажа, товар/услуга называлось "Номенклатура", статья расходов была "Проектом", а "Покупатель/Продавец" был контрагентом. Все эти изменения связаны с адаптацией под обычного пользователя. Хотя мне кажется, мои названия отражают суть реквизитов более точно.
Очень много времени ушло на интерфейс. 1С, конечно, в этом плане сильно ограничена. Долго мучался, чтобы в списке операций дата отображалась только один раз. Постоянно применял костыли: например в динамическом списке в мобильной платформе не работает отбор по табличной части ссылки, хотя на десктопе отрабатывает корректно. Постоянно гнал от себя мысль, начать разрабатывать HTML интерфейс. В платформе 8.3.18 1С что-то поменяли в алгоритмах отображения, что все подписи нижнего меню обрезаются на половине слов, хотя места хватает. Поэтому пришлось откатиться на 8.3.17. В очередной раз убеждаюсь, что на 1С можно писать приложения только для внутреннего использования.
Когда я стал делать программу для других людей, понял, насколько это сложнее, чем просто для себя. Во-первых, у вас уже нет доступа к базе данных. Поэтому нужно очень хорошо продумывать структуру данных, т.к. исправить будет сложно. Удалять и переименовывать реквизиты нельзя. Если вы совершили косяк, то единственная возможность его исправить - это запустить свой обработчик после обновления. Во-вторых, нужно иметь в виду, что обновления могут пропускаться. В-третьих, пользователи не понимают, как это реально работает, поэтому нужно везде ставить защиту от дурака, чтобы не появлялось кривых данных, из-за которых рухнет потом система. В-четвертых, бывает очень сложно повторить ошибку у себя, т.к. доступа к базе нет, а пользователь прислал только скрин ошибки.
Когда разрабатывал, смотрел примеры других мобильных программ на 1С, такие как Бюджет от Рарус, Миниденьги, и Бухгалтер в кармане. Использовал материалы с Инфостарта. Из некоторых приложений скопировал картинки)
И в завершение: Сейчас моей программой реально пользуется трое моих близких знакомых, которые там ведут учет более полугода, поэтому я постоянно дорабатываю программу, исправляю баги и привожу в человеческий вид. Код выкладывать не буду, так как за него стыдно. А программу можно скачать из Google play по ссылке https://play.google.com/store/apps/details?id=com.dds.moneylab
Буду рад любой вашей критике, советам или отзывам.