|
Разбор файла данных 1CD | ☑ | ||
---|---|---|---|---|
0
ikar-rus
04.04.14
✎
13:33
|
Приветствую, коллеги.
Очень нужна помощь специалистов. Ситуация такая: есть(была) очень старая файловая база на платформе 8.0, но случилась беда - её по ошибке подключили в платформе 8.2 и согласились на конвертацию. В итоге структура внутренней БД изменилась, а конфигурация (естественно) не прошла - файл не открывается ни в 8.0 (говорит о несоответствии версии БД), ни в 8.2 (при запуске пытается конвертировать конфигурацию и отваливается с ошибкой). Для начала скачал Tool_1CD, она отлично открывает 1CD-файл, говорит что версия БД 8.2.14, видит внутреннюю структуру таблиц и позволяет выгрузить основную конфигурацию. Из выгруженной конфигурации сделал новую пустую базу, но в новой БД во-первых внутреннее именование таблиц слегка отличается (напр в старой _DOCUMENTJURNAL 16047, а в новой _DOCUMENTJURNAL 16138), а во-вторых непонятно как перегнать данные из старой в новую. Второй вариант: попытаться обмануть старый модифицированный файл (заставить его прикинуться 8.0). Основывался на http://help1c.com/faq/view/673.html , и http://infostart.ru/public/187832/ Не нашел информации чем по большому счету отличаются внутренности БД 8.0.5 от 8.2.14, структура фалов вроде одинакова (если не считать наполнения). Поменял версию БД (в самом начале фала по смещению 8 бит), утилита Tool_1CD сразу стала ругаться, что этот файл теперь не являются базой 1С, значит различия есть может кто знает в чем именно? Сразу скажу что пытался и пересаживать (через HEX) блок CONFIG из новой созданной конфигурации, результата нет. На infostart'e есть человек "awa" который и писал Tool_1CD, он то точно должен знать, но у меня с переводом инфостарта на денежную мотивацию туда дорога заказана, если у кого есть контакты Валерия буду признателен. |
|||
1
МихаилМ
04.04.14
✎
13:41
|
||||
2
Wobland
04.04.14
✎
13:42
|
а как на такие дела смотрят всяческие лицензионные соглашения?
|
|||
3
vde69
модератор
04.04.14
✎
13:43
|
http://code.google.com/p/restoration-base-1c8/
разница в индексах... по этому без полной переиндексации работать и не должно.... |
|||
4
ikar-rus
04.04.14
✎
14:01
|
(1) Большое спасибо!!!
(3) Забыл написать, пробовал эту утилиту, на шаге 1.2 она мне написала что в базе есть неверные блоки и разбор закончился. Индексы, думаю, можно восстановить когда откроется конфигуратор, пока я до него никак не доберусь. |
|||
5
awa15
04.04.14
✎
14:18
|
(0) Структура 8.0 отличается от 8.1+ не только индексами, но размером поля, содержащим локаль (код языка) базы. Как правило, этот код лежит по адресу 0х4000. В 8.0 длина этого поля 8 байт, в 8.1+ - 32 байта. См. в публикации http://infostart.ru/public/19734/ раздел "Блок 2. Корневой объект.". Следом за локалью лежит список блоков таблиц. Поэтому этот список в 8.0 должен быть смещен по сравнению с 8.1+.
|
|||
6
ikar-rus
04.04.14
✎
16:32
|
Убрал 24 лишних байта после объявления блока по адресу 0х4000 и чтобы блоки не поплыли в конце перед +5000 добавил 24 байта нулями, но вот здесь похоже есть загвоздка, т.к. на 5000 уже начинается CONFIG, а ощущения что блок на 4000 закончился нет (ненулевые байты шли впритирку к следующему блоку). Может ли быть ситуация что корневой блок разорван на 2 страницы? Тогда как найти вторую и не пропустить смещение на неё?
|
|||
7
ikar-rus
04.04.14
✎
17:21
|
Просто огромное спасибо Валерию aka awa15 за помощь в восстановлении базы по почте!!!
И дополнительно комментарий от awa15(для потомков): Содержимое блока 2 (локаль и список блоков таблиц базы) занимает не одну страницу 4 (0х4000), а 3 страницы - 4, 0x70 и 0xa434 (это можно увидеть на странице 3). Соответственно, сдвигать надо было весь список блоков страниц, на всех 3х страницах. Соответственно надо было поправить длину содержимого блока 2 на странице 2. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |