logo
logo
Вышеописанный подход [vovchik23 24/02/2012 01:01]
с автоматическим добавлением в базу отсутствующих счетов, валют  и пр., несмотря на свою простоту и очевидность, мне тоже не очень импонирует. Действительно, таким образом можно насоздавать множество ненужных и случайных данных. Правда, для этого надо уж очень стараться, но все же.
 
С другой стороны, меняя диалог экспорта и урезая вполне приемлемый функционал, в виде 1-ого и 2-ого пунктов, мы лучше явно не сделаем. Экспорт всех данных часто не нужен, а возможность выбора периода, так же, как и экспортируемых счетов, просто необходима. Третий пункт - это лишь решение проблем с последующим импортом в пустую базу (я об этом тоже думал, но не написал . Считаю, он должен быть реализован, чтобы дальше при импорте все было корректно... НО! Решаяэту проблему с экспортом мы оставляем главную, о которой я пытался сказать!
 
Что делать, если есть необходимость синхронизации схожих баз данных? Что будет, если мы экспортируем ряд операций, даже с улучшенным функционалом экспорта (тогда ведь сохранятся и валюты, и счета, и классификаторы), а после импортируем в базу, в которой уже имеются подобные классификаторы, счета?
Все правильно, каждый раз будут создаваться все новые и новые классификаторы, по-сути, являющиеся дублями. Как бороться с этим?
 
Вот и напрашивается только одно правильное решение, а именно:
 
1. При экспорте "автоматически проставлять галки" для всех вспомогательных элементов (т.е. это и есть пункт 3), но не жестко, чтобы потом можно было опытному пользователю ненужные отключить
 
2. При импорте проверять не только импортируемый файл, но и базу в которую производится импорт. А дальше, если:
 
  а) В базе отсутствует классификатор/валюта с таким же именем как в импортируемом файле - делаем то же, что происходит и сейчас, создаем новый классификатор/валюту.
 
  б) В базе присутствует классификатор/валюта с таким же именем как и в импортируемом файле - либо сразу объединяем их, либо спрашиваем "Объеденить? Создать новую?"
.  Например, в базе имеется классификатор "Статья->Авто->Бензин", такой же классификатор присутствует и в импортируемом файле. Нет смысла сразу создавать новый классификатор "Статья(1)->Авто->Бензин", лучше просто оставить как и было "Статья" плюс добавить новые "подстатьи", если есть. Именно это происходит сейчас со счетами, но, в отличии от классификаторов, со счетами ситуация сложнее ибо может присутствовать остаток. Я описал эту проблему в предыдущем посте.
Разобрались теперь. Собственно все правильно работает в данном случае
 
  в) В базе присутствует классификатор/валюта с таким же именем как есть в "зависимостях", но в импортируемом файле есть только упоминание о нем (имеется ввиду, что, например, опытным пользователем были импортированы операции, но дополнительные галки "зависимых" счетов, валют, классификаторов были сняты). Например, была операция расхода по классификатору "Статья->Авто->Бензин" на 100р., в импортируемом файле нет классификатора "Статья", но в базе присутствует он же "Статья->Авто->Бензин"  --  Импортируем операцию игнорируя отсутствие классификатора в импортируемом файле.
 
  г) В базе, как и в импортируемом файле отсутствует классификатор/валюта с таким же именем как есть в "зависимостях" импортируемого файла. Например, список операций с отключенными "галками-зависимостями" валюта-счет-классификатор при экспорте импортируется в пустую базу. В данном случае необходимо выдавать ошибку и прекращать импорт, имхо.