пятница, 30 января 2009 г.

Работа с GnuCash. Часть 4. Finance::Quote. Разработка собственных модулей получения котировок.

UPD: Внимание! Последняя самая актуальная и полная версия руководства по GnuCash на русском языке в различных форматах доступна по адресу http://kilork.org/gnucash.html.

В предыдущей части мы вплотную подошли к необходимости автоматизировать процесс получения котировок. И gnucash предоставляет нам для этого отлично средство - Finance::Quote. Finance::Quote - это perl-модуль, и этим очень многое сказано. В комплекте поставки версии 0.15 множество разнообразных подмодулей. Но нужных нам, естественно, все равно нет. Написаны модули на perl. Множество уже в страхе будут бежать без оглядки, так как perl ассоциируется у всех с чем-то сложным и совершенно непонятным. Скажу, так оно и есть. Но в данном случае, модули очень просто написаны, откомментированы. Я убежден, что для того, чтобы написать собственный модуль под Finance::Quote нужны минимальные познания в программировании, не требуется глубокое знание perl, и нужно только желание достичь цели. В состав Finance::Quote входит документация о разработке собственных модулей получения котировок. Используя это руководство мы сделаем простой модуль для получения котировок ОМС Сбербанка. Процесс создания разобьем на шаги. Начнем с того, что у нашего пользователя нет опыта работы с perl. Прекрасно, тогда переходим к созданию нашего модуля для новичков в perl.

Создание модуля.

Мне кажется, очень много для популярности того или иного языка делают вовсе не его качества именно как языка, а какие-то маленькие удобные фенечки, или большие удобные фенечки. В perl главная большая удобная фенечка - это CPAN, гигантский архив готовых модулей, которые ставятся через единый интерфейс, с зависимостями, тестами, и прочим. Очень большая удобная фенечка. Есть фенечки поменьше. Например, утилитки для генерации каркаса модуля. Открываем терминал, идем в папочку проектов (у себя назову ее ~/Desktop/test):

kilork@pantogan:~$ mkdir Desktop/test
kilork@pantogan:~$ cd Desktop/test
kilork@pantogan:~/Desktop/test$ 


Надо определиться с названием. Я обычно весьма много времени трачу на придумывание названия. Как говорил небезизвестный персонаж, как вы яхту назовете, так она и поплывет. Поэтому название надо очень тщательно выбирать. Наш модуль будет жить в пространстве имен Finance::Quote и относится к Сбербанку, назовем его Finance::Quote::Sberbank. Итак, воспользуемся командой h2xs:

kilork@pantogan:~/Desktop/test$ h2xs -AX -n Finance::Quote::Sberbank
Defaulting to backwards compatibility with perl 5.8.8
If you intend this module to be compatible with earlier perl versions, please
specify a minimum perl version with the -b option.

Writing Finance-Quote-Sberbank/lib/Finance/Quote/Sberbank.pm
Writing Finance-Quote-Sberbank/Makefile.PL
Writing Finance-Quote-Sberbank/README
Writing Finance-Quote-Sberbank/t/Finance-Quote-Sberbank.t
Writing Finance-Quote-Sberbank/Changes
Writing Finance-Quote-Sberbank/MANIFEST


Как видно, одна маленькая команда насоздавала нам множество файликов. Один, очевидно, сам каркас модуля. Затем идет генератор Makefile'ов. Файлик с README, файлик тестов. Лог изменений Changes. И MANIFEST. Чудеса, да и только, почти вся работа сделана за нас этой маленькой чудесной командой. Главное - не давать никому знать об этом.

Сгенерируем Makefile. Укажем дополнительный параметр, говорящий о нашем желании ставить модули в локальную директорию пользователя.

kilork@pantogan:~/Desktop/test/Finance-Quote-Sberbank$ perl Makefile.PL PREFIX=~/perl
Checking if your kit is complete...
Looks good
Writing Makefile for Finance::Quote::Sberbank


Отлично, теперь мы можем собирать, тестировать, инсталлировать, и собирать дистрибутив следующими простыми командами:

kilork@pantogan:~/Desktop/test/Finance-Quote-Sberbank$ make # собираем
cp lib/Finance/Quote/Sberbank.pm blib/lib/Finance/Quote/Sberbank.pm
Manifying blib/man3/Finance::Quote::Sberbank.3pm

kilork@pantogan:~/Desktop/test/Finance-Quote-Sberbank$ make test # тестируем
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Finance-Quote-Sberbank....ok                                               
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.08 cusr +  0.01 csys =  0.09 CPU)

kilork@pantogan:~/Desktop/test/Finance-Quote-Sberbank$ make install # инсталлируем
Installing /home/kilork/perl/share/perl/5.8.8/Finance/Quote/Sberbank.pm
Installing /home/kilork/perl/man/man3/Finance::Quote::Sberbank.3pm
Writing /home/kilork/perl/lib/perl/5.8.8/auto/Finance/Quote/Sberbank/.packlist
Appending installation info to /home/kilork/perl/lib/perl/5.8.8/perllocal.pod

kilork@pantogan:~/Desktop/test/Finance-Quote-Sberbank$ make dist # собираем дистрибутив
rm -rf Finance-Quote-Sberbank-0.01
/usr/bin/perl "-MExtUtils::Manifest=manicopy,maniread" \
-e "manicopy(maniread(),'Finance-Quote-Sberbank-0.01', 'best');"
mkdir Finance-Quote-Sberbank-0.01
mkdir Finance-Quote-Sberbank-0.01/lib
mkdir Finance-Quote-Sberbank-0.01/lib/Finance
mkdir Finance-Quote-Sberbank-0.01/lib/Finance/Quote
mkdir Finance-Quote-Sberbank-0.01/t
Generating META.yml
tar cvf Finance-Quote-Sberbank-0.01.tar Finance-Quote-Sberbank-0.01
Finance-Quote-Sberbank-0.01/
Finance-Quote-Sberbank-0.01/MANIFEST
Finance-Quote-Sberbank-0.01/lib/
Finance-Quote-Sberbank-0.01/lib/Finance/
Finance-Quote-Sberbank-0.01/lib/Finance/Quote/
Finance-Quote-Sberbank-0.01/lib/Finance/Quote/Sberbank.pm
Finance-Quote-Sberbank-0.01/t/
Finance-Quote-Sberbank-0.01/t/Finance-Quote-Sberbank.t
Finance-Quote-Sberbank-0.01/Changes
Finance-Quote-Sberbank-0.01/README
Finance-Quote-Sberbank-0.01/Makefile.PL
Finance-Quote-Sberbank-0.01/META.yml
rm -rf Finance-Quote-Sberbank-0.01
gzip --best Finance-Quote-Sberbank-0.01.tar


Команд немного, все очень просто, на текущем этапе нам понадобятся команды make и make test. Затем make install, если надо будет использовать модуль из gnucash или других программ, и наконец - make dist, если нам вдруг захочется все это дело выложить на CPAN (мне захотелось, можно поискать Sberbank на http://search.cpan.org).

Каркас модуля мы создали, подготовили среду к сборке и тестированию, приступаем к реализации модуля для Finance::Quote.

Реализация модуля для Finance::Quote.

Открываем Sberbank.pm в нашем любимом текстовом редакторе. Текст снабжен неплохими комментариями, так что понятно назначение той или иной секции в сгенерированном файле. Нам надо удалить все лишнее, и реализовать методы для Finance::Quote. Самое забавное, что реализуя модуль под Finance::Quote нам вовсе не надо что-то знать о Finance::Quote, не надо даже упоминать ее в нашем модуле. Достаточно поддержать нужный интерфейс и подложить модуль в правильное место.

Находим строку "# Preloaded methods go here.". Отсюда мы и начнем определять наши методы. Первый метод, который нам понадобится, это метод methods. Этот метод будет вызван Finance::Quote для получения списка нестандартных методов, определяемых нашим модулем. Это как раз та строчка, которую мы увидим, когда подключим наш модуль в gnucash. Кроме этого нам понадобится метод, который вернет список поддерживаемых нами атрибутов labels, ну и собственно, главный метод, в котором мы и будем лазить на сайт Sberbank'а, и забивать значения атрибутов. Пока определим только стандартные методы, и пустышку для главного метода. Вот, что у меня получилось:

sub methods { return ( sberbank => \&sberbank ); }

{
my @labels = qw/name last bid ask date isodate currency/;

sub labels { return ( sberbank => \@labels ); }
}

sub sberbank {
my $quoter = shift;
my @stocks = @_;
}


Получился метод sberbank с двумя параметрами, загадочный $quoter, и не менее загадочные @stocks. Метод ничего не возвращает, а вообще говоря - должен. Тем не менее, это уже вполне минимально подходящий для использования модуль Finance::Quote.

Делаем make, make test, make install. Запускаем gnucash командой:
kilork@pantogan:~/Desktop$ FQ_LOAD_QUOTELET="-defaults Sberbank" gnucash


У меня открылся наш последний пример из 3-й части руководства. Есть золото, но котировки надо вбивать руками. Теперь мы попробуем настроить получение котировок с помощью нашего новомодного модуля. Пустышки правда пока.

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



Рис 4.1. Настройка получения онлайн котировок.

Мы подключили наш модуль к нашему инструменту - золоту. Теперь убедимся, что пока ничего не работает. Идем в редактор цен, жмем "Получить котировки", получаем вполне ожиаемый результат.



Рис 4.2. Получение котировок с новым "пустым" модулем приводит к ошибке.

Уже чего-то мы достигли, наш модуль виден gnucash, и выдает даже какую-то ошибку при попытке запроса. В следующей части мы постараемся научить его делать более полезные вещи.

понедельник, 26 января 2009 г.

Работа с GnuCash. Часть 3. Ценные бумаги, драгоценности и слитки.

UPD: Внимание! Последняя самая актуальная и полная версия руководства по GnuCash на русском языке в различных форматах доступна по адресу http://kilork.org/gnucash.html.

Снова возвращаемся к нашей славной программе. До этого мы получили очень неплохие результаты, завели счета, в разных валютах, сделали переводы. Что же теперь? Для меня интереснее всего знать текущее распределение активов. Но валюта - это во первых очень медленный инструмент, а во вторых, для не спекулянта - не особо доходный, а может даже убыточный. Хочется чего то другого. Может быть купить акций, войти в паевые фонды, купить драгоценные металлы, или мешок угля. Кстати, срок хранения сахара - не имеет ограничений, можно и его купить, и тем самым сберечь деньги гораздо лучше, чем в депозите. У меня не хватает времени ни на внутридневную торговлю, ни даже на дневную. Иногда времени нет даже на недельном интервале. В таких условиях инвестиции долгосрочные, и дергаться смысла нет. Но следить за общей массой активов все равно хочется. Пришло время gnucash.

Одним из простых способов инвестирования является открытие металлических счетов. Все просто и понятно, купили золото сегодня, продали золото завтра, цена на золото приятным образом связана с огромным количеством факторов, которые рассматривать здесь совершенно бесполезно. Если цена продажи оказалась выше цены покупки - имеем доход. В противном случае - убыток. Цена задается в рублях, так что имеет смысл еще и учитывать цену в долларах, и движение курса рубля к доллару. Итак, мы пошли в Сбербанк, и открыли ОМС счет в золоте, закинули на него нажитые непосильным трудом денежки, в итоге получили 60 грамм на счету. Как теперь все это занести в gnucash? Такой валюты у нас нет, да и к чему привязываться тоже непонятно. Оказывается, никаких проблем нет, нам надо завести еще один счет, и на этот раз номинировать его не в валюте, а в граммах, и на эти граммы установить стоимость.

Начальная конфигурации состоит из 100000 р наличных, мы создаем счет в долларах, переводим туда 32500 рублей по курсу 32.50. Итого 1000 долларов и 67500 рублей. Теперь попробуем добавить сюда золото.

Выбирем Активы->Текущие активы. Выбираем создать новый счет. В типе счета выбираем "Ценные бумаги".



Рис 3.1. Добавление счета для золота.

Жмем "Выбрать..." для валюты счета. В типе указываем "FUND". Жмем на "New" - такого вида ценностей у нас еще нет. Вводим следующие параметры:



Рис 3.2. Параметры для типа ценности "Золото в Сбербанке".

Обязательно надо указать Символ/Аббревиатуру, тут указываем "SBRF.AU". Так как меньше грамма нам не продадут: часть для продажи - 1. Заканчиваем со вводом параметров, новый счет добавлен, пока на нем ничего нет.



Рис 3.3. Общий список счетов с новым "золотым" счетом.

Вызываем диалог перевода, и со счета наличных рублей переводим 50000, на сумму 60. Т.е. получаем наши заветные 60 грамм золота.



Рис 3.4. Перевод средств на "золотой" счет.

Еще раз посмотрим на общий список счетов после перевода средств на золотой счет. Видно, что общая сумма по прежнему 100000 рублей. Хотя наличности у нас осталось совсем немного.



Рис 3.5. Общий список счетов после перевода средств на "золотой" счет.

Ну это ненадолго, пришло время вернуться в реальный мир. Идем в редактор цен.



Рис 3.6. Редактор цен с ценами обмена золота и долларов на рубли.

Жмем "Получить котировки...". Как и ожидалось, пришли новые котировки. Но, естественно, только для стандартного доллара.



Рис 3.7. Редактор цен с ценами обмена золота и долларов на рубли после получения новых котировок.

Закрываем до поры редактор цен (ненадолго). Видим, что с новыми ценами наши активы уже немного подросли.



Рис 3.8. Общий список счетов после получения новых котировок.

Но это не полная информация. Ведь котировок по золоту нет. Придется добавить их вручную. Снова идем в редактор цен. Жмем "+Add" (чудеса локализации). Находим нашу ценную бумагу через "Выбрать...".



Рис 3.9. Выбор ценной бумаги при добавлении котировок.

Валюта "RUB". Тип выбираем "Последний". Цена будет 900.



Рис 3.10. Ввод котировок.

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



Рис 3.11. Вид редактора цен после ввода котировок.

Теперь мы можем начинать пользоваться отчетами, которые работают исключительно с ценными бумагами. Например, отчет по портфелю.



Рис 3.12. Отчет по портфелю.

Здесь мы видим и отражение по стоимости, и начальную стоимость, и процентное изменение - все, что нам нужно.

Ну и наконец, общий вид счетов после всех манипуляций.



Рис 3.13. Окончательный вид счетов.

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

воскресенье, 25 января 2009 г.

Татьянин День

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

Весь день не мог понять, к чему это вообще? Хотя раз в два-три месяца мне такое снится. Но в данном случае это Татьянин День. Праздник студенчества. Все, теперь понятно, что за сон, знать, в руку он...

З.Ы. Считаю студенчество одной из застарелых форм рабства, как и любую другую полупринудиловку из общественной жизни. Поэтому и праздник сродни празднованию рабами своего рабского положения. Странный праздник.

понедельник, 19 января 2009 г.

Logitech QuickCam E2500 - оживляем всевидящее око...

Прокопавшись по форумам нашел нужную информацию для запуска этого устройства. Теперь спешу поделиться с Вами.

Итак, используем поставляемый в ядре 2.6.28 драйвер gspca. Только придется его чуток пропатчить. Всего навсего прописываем идентификатор нашей камерки.

kilork@phoenix ~ $ diff -u /usr/src/linux/drivers/media/video/gspca/zc3xx.c~ /usr/src/linux/drivers/media/video/gspca/zc3xx.c
--- /usr/src/linux/drivers/media/video/gspca/zc3xx.c~ 2008-12-25 02:26:37.000000000 +0300
+++ /usr/src/linux/drivers/media/video/gspca/zc3xx.c 2009-01-19 01:21:08.000000000 +0300
@@ -7530,6 +7530,7 @@
{USB_DEVICE(0x0458, 0x700c)},
{USB_DEVICE(0x0458, 0x700f)},
{USB_DEVICE(0x0461, 0x0a00)},
+ {USB_DEVICE(0x046d, 0x089d), .driver_info = SENSOR_MC501CB},
{USB_DEVICE(0x046d, 0x08a0)},
{USB_DEVICE(0x046d, 0x08a1)},
{USB_DEVICE(0x046d, 0x08a2)},


Пересобираем ядро с нужными модулями. modprobe gspca_zc3xx. dmesg. Видим что наше устройство зацепилось. Теперь пробуем запустить cheese. Ни фига. Одни квадратики.

На этот случай есть замечательный пакет libv4l:
kilork@phoenix ~ $ emerge -s libv4l
Searching...
[ Results for search key : libv4l ]
[ Applications found : 1 ]

* media-libs/libv4l
Latest version available: 0.5.7
Latest version installed: 0.5.7
Size of files: 84 kB
Homepage: http://people.atrpms.net/~hdegoede/ http://hansdegoede.livejournal.com/3636.html
Description: V4L userspace libraries
License: LGPL-2.1


После установки пробуем еще раз, на этот раз таким образом:

kilork@phoenix ~ $ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so cheese


Ура, на какую-то долю секунды показалась картинка с камеры, страшная, но живая. Потом куда-то делась яркость. На форумах расписано как и с этим побороться, но мне было уже как-то влом. Поэтому я зашел в настройки cheese. Выбрал разрешение 320х240, потом обратно в 640х480, картинка стала поживее. Итак, камера работает, картинку кажет.

Поскольку считаю такой способ запуска устройства сильно извращенным, жду ядра 2.6.29 - там обещали добавить эту строчку, а может быть и победить косяки с яркостью, сообщениями о битых mjpeg, а так же загрузкой процессора под завязку. Ждем ebuild'ов!

P.S. Интересная штука с скайпом, пока не разбирался, но он игнорирует мои попытки подключить камерку, и даже когда я ее выбираю (/dev/video1) все равно в предпросмотре показывает изображение с тюнера (/dev/video0). Могу конечно организовать телетрансляцию через skype, но все же как-то это странно, ругнулся бы хоть как. Ладно, запустим с libv4l и из консольки, может разберемся с бякой.

воскресенье, 18 января 2009 г.

Наконец-то! Поиск по истории bash через PgUp/PgDown

В gentoo это работает по умолчанию. В других дистрибутивах почему-то нет. Наконец-то дошли руки разобраться, где собака зарыта. Дело все в файлике /etc/inputrc. На моем eee в ubuntu он по умолчанию содержит две закомментированые строки:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward


Раскомментируем, открываем новый терминал. Вбиваем начало любой команды, PgUp (Fn+Вверх на eee), находится первая команда, еще раз, слудующая. Никаких Ctrl+R. Ура, еще одно удобство настроено.

пятница, 16 января 2009 г.

CPAN Finance::Quote::Sberbank - Модуль для получения котировок ОМС Сбербанка

Выложил свои труды на CPAN. Теперь любой желающий сможет это установить.

kilork@pantogan:~$ cpan

cpan> i Finance::Quote::Sberbank
Strange distribution name [Finance::Quote::Sberbank]
Module id = Finance::Quote::Sberbank
CPAN_USERID KILORK (Alexander Korolyoff )
CPAN_VERSION 0.01
CPAN_FILE K/KI/KILORK/Finance-Quote-Sberbank-0.01.tar.gz
MANPAGE Finance::Quote::Sberbank - Obtain quotes from Sberbank (Savings Bank of the Russian Federation)
INST_FILE /home/kilork/perl/share/perl/5.8.8/Finance/Quote/Sberbank.pm
INST_VERSION 0.01


cpan> install Finance::Quote::Sberbank


Сразу, правда, в gnucash это не заработает - требуется немного магии. Магия заключается в том, что надо поправить сам Finance::Quote и добавить туда загрузку модуля, выглядит это приблизительно так:

kilork@pantogan:~/perl/share/perl/5.8.8/Finance$ diff Quote.pm~ Quote.pm -u
--- Quote.pm~ 2008-10-26 11:15:50.000000000 +0300
+++ Quote.pm 2009-01-08 11:13:02.000000000 +0300
@@ -170,7 +170,7 @@
DWS FTPortfolios Fidelity FinanceCanada Fool HEX IndiaMutual
LeRevenu ManInvestments NZX Platinum SEB StockHouseCanada
TSP TSX Tdefunds Tdwaterhouse Tiaacref Troweprice Trustnet Union
- USFedBonds VWD ZA Cominvest Finanzpartner
+ USFedBonds VWD ZA Cominvest Finanzpartner Sberbank
Yahoo::Asia Yahoo::Australia Yahoo::Brasil
Yahoo::Europe Yahoo::NZ Yahoo::USA/; }


Т.е. просто дописываем модуль в список загружаемых. В данном примере подразумевается, что cpan для пользователя настроен на локальную директорию в папке пользователя, и туда же установлены модули Finance::Quote и Finance::Quote::Sberbank. Подробнее о настройке установки модулей в локальную директорию можно посмотреть здесь. Я пока сомневаюсь, что мой модуль включат в официальный дистрибутив, так что пока так.

UPDATE: Внимательно прочитал модуль, можно сделать гораздо проще, надо назначить переменную окружения:
FQ_LOAD_QUOTELET="-defaults Sberbank"

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

kilork@mexidol ~$ FQ_LOAD_QUOTELET="-defaults Sberbank" gnucash finans



Итак, если мы все сделали правильно, то в gnucash->Инструменты->"Редактор ценных бумаг" можно будет настроить следующее:




Теперь, надеюсь более подробно описать собственно сам процесс разработки новых модулей для gnucash. Цепочка отработана.

UPDATE2: Добавил отдельный сайт для работы с котировками ОМС Сбербанка - пользовательский и программный интерфейс: http://kilork.blogspot.com/2012/01/sberbank-quotes.html.

среда, 14 января 2009 г.

Месть козлов

Все же иногда правило вселенской несправедливости дает осечку. Жаль, что редко.

вторник, 13 января 2009 г.

Работа с GnuCash. Часть 2. Валюта в личной бухгалтерии

UPD: Внимание! Последняя самая актуальная и полная версия руководства по GnuCash на русском языке в различных форматах доступна по адресу http://kilork.org/gnucash.html.

Курс доллара продолжает расти, чем неизменно радует всех обладателей зеленых бумажек. До сих пор мы работали только с рублями, но тут случилось чудо - мы нашли в загашниках некоторое количество $. Теперь есть только одна проблема - как все это учесть в домашней бухгалтерии?

В текущей структуре счетов нет валютных счетов, поэтому идем в Активы->Текущие активы, в контекстном меню выбираем пункт меню "Новый счет". Это будет счет для имеющихся у нас наличных долларов. Назовем его Cash, валюту выбираем USD, следим, чтобы тип счета был "Активы", а родительски счет "Текущие активы".



Рис 2.1. Создание нового счета в иностранной валюте.

Поскольку деньги у нас уже есть, то перед тем, как создать счет, зайдем на закладку "Начальное сальдо", здесь вводим имеющуюся у нас сумму $. В примере это 1000.



Рис 2.2. Закладка "Начальное сальдо".

Снова посмотрим на общий список счетов.



Рис 2.3. Вид счетов после добавления счета Cash, номинируемого в USD.

На лицо явное противоречие - у нас на 1000 USD больше, но активы по прежнему 99700. Все дело в том, что GnuCash пока не знает курсы обмена, чтобы правильно отразить сумму активов. Заходим в меню Инструменты->Редактор цен.



Рис 2.4. Редактор цен.

Сейчас у нас нет котировок. Жмем кнопку "Получить котировки".



Рис 2.5. Редактор цен после получения котировок.

Теперь виден полученный курс обмена USD к RUR. Отлично. Закрываем редактор цен. И снова смотрим на общий список счетов. Замечательно, мы видим именно то, что хотелось видеть.



Рис 2.6. Вид счетов после получения котировок.

Проведем типичную обменную операцию. Для этого встаем на счет Cash, выбираем в контекстном меню "Перевести". Выбираем для передачи счет наличных, который номинируется в рублях, после этого снизу становится доступным для ввода курс обмена. Вводим там 30.5, подтверждаем "Ок".



Рис 2.7. Перевод между счетами в разных валютах с указанием курса обмена.

Теперь список счетов выглядит так:



Рис 2.8. Счета после проведения обменной операции.

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

воскресенье, 11 января 2009 г.

Знакомство с GnuCash - программой по учету личных финансов

UPD: Внимание! Последняя самая актуальная и полная версия руководства по GnuCash на русском языке в различных форматах доступна по адресу http://kilork.org/gnucash.html.

Предисловие.

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

Я не буду рассматривать аспекты установки программы, в случае Windows это обычный инсталлер, для Linux это ваш любимый пакетный менеджер используемого дистрибутива, руководство я пишу используя ubuntu на eee pc, непосредственно учет веду в gentoo на большой машинке. Никаких проблем нигде не возникало, либо удавалось их достаточно легко решить.

Запуск gnucash.

Итак, выбираем либо пункт меню, либо иконку на рабочем столе. Я набираю gnucash в терминале, интересно, что он напечатает в output:

kilork@pantogan:~$ gnucash

Если все установлено и нам повезло, мы увидим симпатичный логотип gnucash, и загружаемые модули, так же, возможно покажутся и многочисленные советы новичкам и продвинутым пользователям, которые могут оказаться весьма полезными:



Рис 1. Запуск gnucash.

Начало работы.

Работа с gnucash начинается с создания набора счетов. Если вы запускаете gnucash в первый раз, то мастер покажется автоматически. В противном случае он будет показан при выборе пункта меню Файл->Новый...->Новый файл.



Рис 2. Мастер создания новой иерархии счетов.

После показа приветствия жмем "Далее" и попадаем на выбор валюты по умолчанию. Валюта выбирается на основе стоящей в системе локали, но может быть изменена на этом этапе мастера. Если все правильно, то вы увидите в качестве валюты счетов RUB (Russian Ruble).



Рис 3. Выбор валюты счетов.

Далее gnucash предлагает несколько вариантов структуры счетов. Предполагая чисто домашнее использование системы на начальном этапе оставляем все по умолчанию.



Рис 4. Выбор структуры счетов.

Хотелось бы сразу увидеть на наших счетах какие-то деньги. Считаем, что в начале у нас есть только наличность. Выбираем счет "Наличные" (Активы->Текущие активы->Наличные), щелкаем в колонке "Начальное сальдо", и вбиваем имеющуюся сумму наличных. Для примера я ввел значение 100000, надеюсь, хватит на первое время.



Рис 5. Начальные параметры счетов.

Вот и все, мы создали начальную структуру счетов, у нас есть какие-то средства на них, можно начинать работать.

Закрываем окно мастера, перед нами появляется основное окно gnucash.



Рис 6. Главное окно gnucash с открытым списком счетов.

Теперь перейдем к некоторым деталям. Для начала разберемся откуда у нас взялись наличные, и что нам дает "Начальное сальдо". Разворачиваем в счетах Активы->Текущие активы->Наличные. Двойным щелчком переходим на список транзакций по счету. Сейчас в этом списке присутствует единственная транзакция со счета начального сальдо. Притом, если найти этот счет в списке счетов, его остаток так же будет равен 100000. Это одна из главных концепций бухучета - активные и пассивные счета. В данном случае счет наличных активный, а счет начального сальдо - пассивный. Перевод со счета начального сальдо на счет наличных приводит к увеличению остатка на обоих счетах на 100000. И никаких отрицательных значений. Вот так и делается начальный капитал банка.



Рис 7. Список транзакция счета "Наличные".

Теперь понятно, откуда взялись наши наличные. Они пришли со счета начального сальдо. Теперь доходы за отчетный период будут считаться от суммы этого начального сальдо. Т.е., если через месяц у нас будет 110000, то доход будет равен 10000.

Продолжаем. Настало время что-нибудь купить за наши наличные деньги. Допустим нам понадобился дорожные путеводитель. В списке счетов находим Расходы->Книги, вызываем контекстное меню, выбираем пункт "Перевести". На экране появляется диалог для перевода средств между счетами. Слева выбираем счет наличных, справа оставляем выбор на книгах. Вводим сумму, описание. У меня получилось что-то в этом духе:



Рис 8. Ввод перевода со счета наличных на счет расходов по книгам.

После этого мы видим, что расходы стали равны 100, наличность вместе с активами - 99900. Ну и прибыль, что логично, стала -100. Начались наши непростые финансовые будни.



Рис 9. Состояние счетов сразу после ввода перевода.

Откроем список транзакций по счету "Книги". Здесь видно, как отразились введеные нами атрибуты.



Рис 10. Список транзакций по счету "Книги".

Собственно, гораздо проще вводить транзакции именно со списка транзакций. Что я и делаю, ввожу еще одну транзакцию по счету книги, но на этот раз не прибегая к пункту меню, а непосредственно со списка. На этот раз это будет атлас дорог за 200.



Рис 11. Ввод транзакции со списка.

На этом можно считать законченным первый этап знакомства с gnucash. Мы создали структуру счетов, ввели начальные данные, выполнили операции по счетам. На текущий момент наши активы равны 99700, расходы - 300, доходы - 0, прибыль - -300, начальное сальдо - 100000. В следующем посте я создам счет в USD, сделаю перевод между счетами в разной валюте, а также покажу, как получать котировки из интернета. Да в целом, все это может сделать и любознательный читатель, так как это очень просто и весьма занимательно. Мои цели чуть другие, кроме ведения просто своих расходов, мне требуется полная автоматизация процесса, так что будут посты и про написание собственных модулей для получения котировок, и по интеграции с банковскими системами. Надеюсь это будет интересно, и не только мне.

четверг, 1 января 2009 г.

Традиционное "Итого" за 2008 год

Главное событие года - экономический кризис. Оно повлияло полностью на все мои планы и дела. За этот год мои доходы по з/п выросли в 1.5 раза. Это плохо, так как целью было удвоение з/п каждый год. Активы за год выросли в 3 раза, что можно считать неплохим результатом. Если бы не попытки начать инвестиции, рост мог бы составить 6 раз. В новом году нет оснований расчитывать на какой-то прорыв, поэтому будем закладывать средние показатели. Буду ставить задачу удвоения активов. Т.е. условно говоря - выход на 0 по потерям активов за 2008 год к концу 2009. И с 2009 года попробуем все заново. Пока мне нравится это хобби, одна проблема, насколько я помню, устойчивый интерес к чему-бы то ни было у меня редко длится больше 1.5 лет, после этого вырабатывается система и интерес удовлетворяется, либо система не вырабатывается и интерес теряется совсем.

Я становлюсь все более домашним существом. Работа стала ближе к дому, и благодаря этому я стал в много раз счастливее, я не устаю в пробках, могу погулять с собакой утром и вечером. Это стоит думаю тех недополученных 0.5. Скорее, даже больше. Я отдаляюсь ото всех, так как привычная мера всех расстояний расстоянием до работы потеряла смысл, и выходить за пределы квартиры ужасно лень. Наверно, это не то, что мне хотелось бы написать. Лень переполняет меня.

Радует, что несмотря на лень, я начинаю приводить дом в порядок. Хорошо бы в этом году сделать все по дому, и жить в комфорте (я правда видимо могу жить в комфорте и на компостной куче, но тут надо учитывать не только мои потребности).

В 2008 году было несколько проектов кроме работы, всеми в целом доволен, наконец смог поучаствовать и в опенсурсе, и в стартапе, это интересно. Пока правда в итоге все равно возвращаюсь к старому доброму банковскому софту. Надеюсь свободное время посвятить внедрению некоторых своих идей в опенсурс, в нашу систему, и в мир. Текущее достижение - несколько строк в программе anjuta - кроссплатформенной IDE под Gnome, и упоминание в списке контрибьюторов. Сейчас есть идея продвинуть очень похожий патчик в gnucash - уж больно я люблю использовать символические ссылки, но почему-то мало кто с ними работает так, как хочется мне. Коммерческие проекты по недвижимости: было второе внедрение системы, успехом не увенчалось, думаю сейчас там систему не используют, зато дало мне возможность перевести части системы на открытые компоненты. Фактически, отработав внедрение на новом клиенте получили закономерный результат, но зато теперь тоже самое без лишнего геммороя можно продать в первую инсталляцию. Главное, чтобы было желание. С деньгами сейчас у недвижимости должно быть туго, но я считаю, что любой ИТ-проект можно и заморозить на время, без ущерба всем сторонам.

Основной итог 2008 года - расслабленность... Я чуть-чуть расслабился. Хотя, скорее всего - не стоило бы.