Перенос данных из старой программы: самописный софт, Access, DBF и старые базы
Старая программа работает, пока не сломается, а разработчика уже не найти. Показываю, как достать из неё данные и перенести их без потерь.
Коротко (TL;DR)
- Многие компании годами живут в старой программе, которую когда-то написал знакомый программист. Его давно нет, а данные нужны в новой системе или хотя бы в таблице.
- Данные почти всегда можно достать: через встроенную выгрузку, прямым чтением файлов базы или через экспорт отчётов. Главные трудности — кодировки, кривые даты и связи между таблицами.
- Перенос идёт через пробный запуск и сверку итогов со старой программой. Старую базу после переноса не удаляют.
Бизнес много лет вёл клиентов, заказы и склад в одной программе. Её написал человек, которого уже не найти. Программа работает только на одном старом компьютере, новые сотрудники её боятся, а руководство хочет перейти на нормальную систему. Но в старой базе вся история, и бросить её нельзя. Я переношу данные из таких программ. Расскажу, как это делается и на чём обычно спотыкаются.
Что внутри старой программы
Снаружи старая программа выглядит как окна и кнопки. Внутри у неё всегда есть база данных. Чаще всего это файл Access, набор файлов DBF, файл какой-нибудь небольшой встроенной базы или папка с собственными файлами программы.
Первым делом я выясняю, где эти файлы лежат и в каком они формате. Для этого достаточно доступа к компьютеру, где стоит программа, или копии её папки. Сама программа для этого может даже не запускаться.
Самописный софт часто хранит данные в понятном формате. Разработчики брали то, что было под рукой. Поэтому данные удаётся прочитать чаще, чем кажется владельцу.
Как достать данные
Способов три, и я выбираю по ситуации. Первый — встроенная выгрузка. Если в программе есть экспорт в Excel или текстовый файл, начинаю с него. Это самый безопасный путь, но выгрузка часто неполная: только часть полей или только текущий год.
Второй — прямое чтение файлов базы. Я делаю копию файлов и читаю их напрямую, минуя программу. Так видны все таблицы и все поля, включая те, что программа не показывает на экране. Это основной способ для Access и DBF.
Третий — экспорт отчётов. Если база зашифрована или в неизвестном формате, остаются отчёты, которые программа умеет печатать. Их можно сохранять в файл и разбирать. Это последний вариант: долго и не всё видно, но лучше, чем переписывать руками.
| Откуда | Как достаём | На что смотреть |
|---|---|---|
| Самописная программа со встроенным экспортом | Выгрузка в Excel или текст | Все ли поля и годы попадают в выгрузку |
| Access | Прямое чтение файла базы с копии | Пароль на файл, связи между таблицами |
| DBF | Чтение каждой таблицы отдельно | Кодировка текста, удалённые, но не стёртые записи |
| Встроенная небольшая база | Чтение через подходящий драйвер | Версия формата, служебные таблицы |
| Неизвестный или закрытый формат | Экспорт отчётов в файл | Полнота отчётов, разбивка по страницам |
| Старая версия 1С | Выгрузка средствами самой 1С | Соответствие справочников в новой версии |
Кодировки и кривые даты
Первое, что видишь при чтении старой базы, — вместо русских букв непонятные символы. Старые программы хранили текст в кодировках, которые сейчас почти не используются. Скрипт определяет кодировку и переводит текст в современную. Иногда в одной базе встречаются две кодировки, и это видно только по отдельным полям.
Второе — даты. Их хранили как текст, как число дней от какой-то точки или в двух разных форматах. Бывают даты вроде 1900 года или 2099 года — так раньше обозначали пустое значение. Я разбираю каждый случай и договариваюсь с вами, что с ним делать.
Третье — суммы и количества. Точка или запятая, копейки отдельным полем, отрицательные числа для возвратов. Всё это нужно понять до переноса, иначе итоги не сойдутся.
Восстановление связей между таблицами
В базе заказ хранится отдельно от клиента, а строки заказа отдельно от самого заказа. Связаны они кодами. В нормальной базе эти связи описаны. В самописной — часто нет, и их приходится восстанавливать по смыслу.
Я смотрю, какие поля похожи на коды, и проверяю, сходятся ли они. Бывают осиротевшие записи: строки заказа без заказа, заказы удалённых клиентов. Их не выбрасываю, а собираю в отдельный список. Может оказаться, что это важная история.
Когда связи восстановлены, данные можно раскладывать в структуру новой системы. Почему этот этап всегда занимает больше времени, чем ждут, я писал в статье миграция данных сложнее, чем кажется.
Пробный перенос и сверка итогов
Сначала перенос идёт в тестовую копию новой системы или в таблицу. После этого я сверяю итоги. Число клиентов, число заказов, сумма продаж за каждый год, остатки на дату. Эти цифры должны совпасть с тем, что показывает старая программа.
Если где-то не сходится, ищу причину и повторяю перенос. Только когда итоги совпали и вы проверили несколько знакомых клиентов вручную, делаю боевой перенос.
Старую базу после этого не удаляю и не советую удалять вам. Сохраните копию файлов и, если можно, сам компьютер с программой хотя бы на год. Сколько хранить документы и данные по закону, уточните у бухгалтера или юриста.
Как это выглядит, когда настроено
Сотрудник открывает новую систему и находит клиента, который последний раз покупал много лет назад. Вся история на месте: заказы, суммы, заметки. Русские буквы читаются, даты правильные.
Руководитель смотрит продажи по годам в новой системе и видит те же цифры, что в старой программе. Старый компьютер выключен и стоит в шкафу, а копия базы лежит в надёжном месте. Никто больше не боится, что однажды он не включится.
Как заказать такую задачу
Пришлите копию папки программы или хотя бы скриншоты главных окон и список файлов в её папке. Напишите, куда нужно перенести данные: в новую CRM, в учётную систему или в таблицу. Расскажите, какие данные важны, а какие можно оставить в архиве.
Я смотрю формат базы и называю оценку по срокам. Достаю данные, восстанавливаю связи и делаю пробный перенос. Сверяем итоги вместе. Потом боевой перенос, отчёт о том, что и куда переехало, инструкция и доступы. После сдачи есть гарантийный срок на исправление ошибок в моей работе.
Перенос почти всегда разовая задача. Абонентка нужна, если старая и новая система какое-то время работают параллельно и данные надо синхронизировать. Подробнее на странице разовые задачи: скрипты, парсеры, выгрузки. Если речь о переходе между версиями 1С, почитайте статью переход с УТ 10.3 на УТ 11.
Частые вопросы
Программа уже не запускается. Данные ещё можно достать?
Часто да. Для прямого чтения файлов программа не нужна, нужны сами файлы базы.
На базе стоит пароль, а его никто не помнит.
Если база ваша, это обсуждаем отдельно. Иногда доступ удаётся восстановить, иногда остаётся путь через отчёты.
Можно ли перенести только последние годы?
Да. Старые годы можно выгрузить в архивную таблицу, чтобы не нагружать новую систему.
Сколько времени занимает перенос?
Зависит от формата и связей. Оценку называю после того, как посмотрю файлы.
Будет ли простой в работе?
Обычно на один день боевого переноса. Всё остальное делается на копии.
Коротко о главном
Старая программа без разработчика — не тупик. Внутри почти всегда есть база, которую можно прочитать напрямую или через выгрузку.
Главная работа — кодировки, даты и связи между таблицами. Перенос идёт через пробный запуск и сверку итогов, а старая база остаётся в архиве.
Если у вас есть старая программа, из которой страшно уходить, пришлите список файлов из её папки. Скажу, как достать данные. Напишите в Telegram, MAX или VK.
Небольшие задачи без большого проекта
- Парсеры, сверки и выгрузки в таблицы
- Скрипты, генераторы документов, обработка файлов
- Простые боты и напоминания в мессенджер
- Абонентка: мониторинг, поддержка, отчёты
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


