Импорт проводок в GnuCash

Как и обещал в предыдущей статье, возвращаюсь с темой импорта проводок в GnuCash. Это одна из тех задач, решение которых упорно не гуглится вообще нигде — ни в российском сегменте, ни в англоязычном (может плохо ищу?). Забавно, но одна из первых ссылок в гугле по теме «Import GnuCash» ведет на официальную страницу поддержки, где один из, видимо, разработчиков говорит, что программа не умеет импортировать файлы с проводками, которая сама же экспортировала (во всяком случае на тот момент), сейчас с некоторыми оговорками это уже не совсем так, но, тем не менее, без дополнительных преобразований файла экспорта импортировать его по-прежнему не получится. В общем искал долго, но ничего путного мне по этой теме так и не попалось. Делюсь с вами тем, до чего удалось докопаться самостоятельно.

И так, в GnuCash есть пара пунктов меню, отвечающих за импорт:

и за экспорт:

Пойдем от обратного: чтобы понять, в каком виде программе подавать данные для импорта, посмотрим, в каком виде она сама их экспортирует, для этого необходимо перейти по меню, как было указано выше: Файл >> Экспорт >> Экспорт проводок в CSV… Появится окно, в котором необходимо задать дополнительные параметры. Формат CSV, который мы выбрали, по сути, близок к обычному текстовому файлу, данные в котором отделены друг от друга каким-либо символом, чаще всего таким символом выступает запятая или точка с запятой. Крайне рекомендую указать другой разделитель, т.к. если оставить разделитель по умолчанию, то при наличии в названии счетов или описании проводок запятых, их текст будет разбит на части по этим запятым. Поэтому советую указывать в качестве разделителя какой-то редко используемый символ. Для себя я выбрал в качестве разделителя знак тильды ~:

После этого нажимаем кнопку «Следующая» и переходим к выбору счетов. Выбрать лучше несколько счетов, причем связанных между собой общими проводками (чуть более по-бухгалтерски это называется корреспондирующими счетами), например, можно выбрать «Наличные», «Заработная плата», «Продукты», «Столовая», «Музыка и кино» (чтобы выбрать несколько счетов, надо удерживать клавишу Ctrl на клавиатуре):

Важно взять именно связанные между собой счета, чтобы увидеть, как GnuCash отобразит их взаимосвязь в общих проводках.
Также стоит ограничить период выгрузки, т.к. для понимания сути формата много проводок не требуется.
Дальше ничего особенного — также нажимаем «Следующая». В появившемся окне выбираем папку сохранения и вводим имя файла, например «Export.csv»:

Нажимаем кнопку «Ок», и жмем в очередном окне кнопку «Применить» (там не требуется каких-либо дополнительных действий, поэтому здесь и далее в подобных случаях обойдемся без снимка экрана). После этого должно появиться сообщение об успешном экспорте данных.
Для открытия в Excel полученного файла с учетом наших разделителей, необходимо перейти на вкладку «Данные», и в группе «Получить и преобразовать данные» нажать кнопку «Из текстового/CSV-файла», и в появившемся окне выбрать файл с экспортированными проводками:

В появившемся окне, необходимо выбрать формат «65001: Юникод (UTF-8)», в качестве разделителя указать «Пользовательский» и задать тот же символ, который указывали при экспорте из GnuCash, в моем случае это ~. После этого, мешанина из абракадабры должна разложиться на отдельные читаемые столбцы:

Жмем «Загрузить». Вуаля! Теперь в Excel мы видим наши проводки:

Файл с этими данными вы можете скачать по ссылке (см. лист «Шаг1»).
Здесь видно, что связанные между собой строки разных счетов одной проводки находятся одна под другой, при этом нижняя строка обладает сильно меньшим числом аналитик — в ней только название счета и сумма.
Не буду описывать все эксперименты по поиску работающего способа импорта, и перейду сразу к действиям, которые ведут к необходимому результату. Во-первых, удалим все «лишние» столбцы (погоды при импорте они не сделают), достаточно оставить только «Дата», «Номер», «Описание», «Название счета» и «Amount num.» (лист «Шаг2»):

Как видно на картинке выше, я не только удалил некоторые столбцы, но и для отличия новых проводок от исходных, во всех строках поменял дату на 10.09.2018, для наглядности можете также поменять еще описание или сумму — как угодно. Есть нюанс — GnuCash при импорте в рамках одной и той же даты проводки сортирует их как-то по-своему и эта сортировка может отличаться от той последовательности, которую вы видите в Excel, поэтому нам понадобиться столбец «Номер», где необходимо задать требуемую последовательность проводок внутри одной даты (для наглядности эти номера я проставил вразнобой, чтобы можно было убедиться в их влиянии на последовательность проводок после импорта).
Столбец «Amount Num.» с суммами нам надо разбить на два, назовем их «Дебет» и «Кредит», ведь было бы слишком просто, если бы наша любимая программа умела импортировать эти суммы в том же виде, как она их экспортирует. В столбец «Дебет» надо скопировать положительные числа, а в столбец «Кредит» — отрицательные, но при этом убрать знак минуса, должно получиться так (лист «Шаг3»):

Надо понимать, что файл, с которым мы сейчас с вами работаем в Excel это уже не тот же самый *.CSV, который загрузили раньше, это таблица самого Excel со всеми ее свойствами. Для GnuCash же его надо обратно превратить в CSV-файл. Увы, сохранение и экспорт в Excel несимметричны по возможностям импорту — в частности, нельзя выбрать кодировку (нам нужна UTF-8) и даже разделитель (напомню, от запятой, мы отказались, т.к. с ней могут быть проблемы). На самом деле разделитель поменять можно, но делается это на уровне всей ОС Windows и влияет на все программы, которые это используют, поэтому в большинстве случаев это плохой вариант.
Самый простой способ, получить требуемое, следующий.
В соседнем столбце напишем простую формулу, которая сцепит значения всех наших столбцов через тильду ~, кроме ненужного нам «Amount Num.» (Лист «Шаг4»):

Формула:
=A1&"~"&B1&"~"&C1&"~"&D1&"~"&F1&"~"&G1
Важно! Убедитесь, что после сцепки, значения даты в столбце «I» у вас выглядят нормально, а не превратились в непонятные числа (такое может случиться, если в столбце «A» «Дата» у вас не в текстовом формате, а в формате дат).
Далее заходим в текстовый редактор, позволяющий задать кодировку (могу порекомендовать Notepad++), выбираем там UTF-8:

И вставляем данные из столбца «I», в котором ранее мы получили сцепленные значения:

Сохраняем файл, указав расширение CSV:

Наконец-то мы можем приступить к импорту.

Перед тем как выполнять следующие шаги этого квеста, обязательно сделайте резервную копию вашего файла базы данных GnuCash!

Как было показано на самой первой картинке в этой статье, переходим по меню в GnuCash: Файл >> Импорт >> Импортировать проводки из CSV… (не перепутайте с другими объектами импорта, мы импортируем именно проводки, а не счета или еще что-нибудь).
В первом появившемся окне будет краткое описание процедуры импорта, но раз вы уже здесь, то можете его смело пропустить и нажать кнопку «Следующая», в появившемся окне выбираем наш файл для импорта:

Жмем «ОК». В появившемся окне нам следует сделать следующее:

  1. Убрать в качестве разделителя запятую
  2. Поставить в поле «Настроенный» свой разделитель ~
  3. Отметить галкой Multi-split (говорит проге, что две части (дебет и кредит) одной проводки, в нашем файле находятся как строки одна под другой)
  4. Формат даты выбрать Д-М-Г
  5. Указать, что первую строку нам считывать не нужно (в поле Leading Lines to Skip поставить 1), после чего текстовое описание заголовка нашего файла станет зачеркнутым

Чтобы при последующих импортах не приходилось проделывать все те же настройки заново, можно их сохранить, указав свое название формата (например, «Мой формат») и нажав кнопку «Save Settings»:

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

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

Обратите внимание, что из-за корявости перевода столбцу «Дебет» из нашего файла соответствует «Депозит», а столбцу «Кредит» — «Снято».
Если вы увидите какую-либо строку, подсвеченную красным, значит в ней имеется какая-то проблема с данными (неверный формат дат, или еще что-то). Такие строки, при желании, можно проигнорировать, отметив флажок «Пропустить ошибки», но лучше, конечно, разобраться что же не так и прогрузить корректный файл.
После всего этого, нажимаем кнопку «Следующая».

Здесь программе надо объяснить, как соотносятся названия счетов из нашего файла с названиями ее счетов (к сожалению, GnuCash даже по идентичным названиям не догадывается о такой связи и не предлагает меппинга по умолчанию). Дважды кликаем по каждому счету, полученному из файла импорта, и в появившемся окне находим соответствующий счет GnuCash, выделяем его и нажимаем кнопку «ОК»:

И так для каждого счета. В итоге должно получиться так:

Радует то, что программа запоминает указанные соответствия и в следующий раз может запросить указать связь только, если встретит незнакомое ей название счета в файле импорта.
Посмотреть и скорректировать при необходимости этот меппинг, можно будет позднее, из меню GnuCash: Инструменты >> Import Map Editor:

Нажимаем «Следующая», появится пояснение к следующему шагу, пропускаем его, снова нажав «Следующая».

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

В появившемся окне надо проставить флажки в столбце «Д» (достоверно мне не известно, что это значит, знаю только то, что, воспользовавшись другими флажками, вы рискуете перезаписать ваши проводки — проверено). Информация о том, что проводка сбалансированная, означает, что вы уже задали обе стороны проводки и дебет, и кредит в своем файле импорта:

Жмем применить! После этого появится информационное окно, которое можно закрыть. Давайте посмотрим, что у нас из всего этого вышло. Перейдем в просмотр содержимого счета «Наличные» — он показательный, т.к. в нашем примере корреспондировал с каждым другим счетом:

Видим, что у нас появилось 4 новые проводки с той датой, которую мы указали в файле для импорта (10.09.2018), также обратите внимание, что проводки были отсортированы в соответствии со значениями, которые мы задали в столбце «Номер» в файле импорта. Из-за того, что в рамках эксперимента мы сформировали файл импорта на основе файла экспорта, у нас «задвоились» проводки (отличаются от изначальных только датой и номером). На практике, разумеется, вы будете создавать файл для импорта не на основе уже имеющихся проводок, а на основе новых данных.
На этом, поздравляю всех, кто дошел до самого конца!
Следующая статья будет заключительной из всего цикла, посвященного автоматизации домашнего финансового учета на основе SMS, Excel и GnuCash, там я расскажу, как те данные, которые мы раньше получили при парсинге банковских сообщений, преобразовать в файл импорта.

One thought on “Импорт проводок в GnuCash

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *