Программа Finmerge предназначена для объединения записей из нескольких бэкап файлов Financisto в один общий бэкап файл, содержащий все уникальные записи из всех входных файлов. Типичный сценарий использования - два или более человека (как правило члены одной семьи) хотят вести общий учет расходов, используя свои мобильные устройства с программой Financisto. Вот шаги, как это сделать:
- Каждый человек вводит свои расходы/доходы на своем устройстве в программу Financisto.
- Периодически (раз в день/неделю...) каждый делает на своем устройстве бэкап данных стандартными средствами Financisto
- Любым удобным способом (через dropbox, google drive, программу типа SyncMe Wireless, прямое подключение к компу) бэкап файлы переносятся на компьютер
- На компьютере запускается программа Finmerge, которая объединяет данные в один общий бэкап файл.
- Любым удобным способом новый файл переносится на мобильные устройства и каждый человек восстанавливает базу данных Financisto из этого файла.
Для запуска программы необходимо установить Java Runtime Environment версии 1.7 или выше, скачать под свою платформу можно здесь. Далее в командной строке
java -jar finmerge-1.0.4.jar [-logLevel level] command [inputFile] [-out outputFile]
level - уровень детальности сообщений: SEVERE,WARNING,INFO,FINE,FINER,FINEST,ALL
command
print - распечатать содержимое входных файлов (работает по умолчанию)
added - распечатать только новые записи из входного файла
deleted - распечатать только удаленные записи из входного файла
comm123 - сравнить два файла, цифры задать по необходимости:
1 - распечатать записи, уникальные для первого файла
2 - распечатать записи, которые есть в обоих файлах
3 - распечатать записи, уникальные для второго файла
equal - сравнить содержимое двух файлов
merge - объединить входные файлы
metadata - распечатать метаданные входных файлов
log - распечатать историю "объединений"
inputFile - задает входной файл или несколько файлов. Вместо файла можно укзать папку,
тогда будет выбран самый актуальный файл.
outputFile - задает имя выходного файла. Если не задано, результирующий файл
будет записан в каждую входную папку. Если входных папок нет, результат будет записан в текущую папку.
Программа Finmerge объединяет уникальные записи из входных файлов и записывает их в выходныой файл. Уникальность каждой записи определяется на основе значений ее полей. Например, для валюты уникальным будет ее код, для счета - название+код валюты, для категории - название+список названий всех "предков", и т.д. Благодаря проверке на уникальность, в выходной файл каждая запись попадает только один раз. Если в выходном файле запись из фходного файла уже содержится, то она не добавляется.
Важно понимать, что объединение уникальных записей не есть синхронизация. Если какая то запись будет удалена на одном устройстве, она все еще существует на других и при объединении попадет в выходной файл и даже снова вернется на устройство, на котором была удалена. Аналогично если какая то запись была отредактирована, в выходной файл попадут две версии этой записи: новая и старая. Чтобы решить эту проблему программа Finmerge сравнивает входные файлы с результатом последнего объединения (если это возможно) и выявляет записи, удаленные со времени последнего объединения. Finmerge удаляет эти записи их выходного файла. Таким образом удаление или редактирование записи на одном устройстве распространяется на все устройства.
Тем не менее проблема остается, если два человека одновременно отредактируют одну и ту же запись (каждый на своем устройстве). В этом случае в выходной файл попадут все новые версии записи (что в случае с транзакциями есть очень плохо). Для этой проблемы пока нет технического решения. Я предлагаю решать эту проблему административным путем - договориться, чтобы каждую запись имел право редактировать только один человек. Например, каждый может редактировать только записи, которые вводил он сам.
- Необходимо использовать Java версии 1.7 или старше.
- Составные транзакции не поддерживаются (я их не использую и не проверял)
- Бюджеты и местоположения должны работать, но это не протестировано.
- Конфликт редактирования одной и той же записи на разных устройствах технически не разрешен. Необходимо решать его через договоренности между людьми.
- Я не публикую входные данные для тестов, потому что это мои реальные финансовые данные. По этой причине все тесты закоментированы.
Вопросы? замечания? предложения? Пожалуйста, используйте issues
- Financisto - менеджер финансов
- SyncMe Wireless - удобная программа для синхронизации файлов между Android устройством и компьютером без помощи "облаков"