Имя: Пароль:
1C
1С v8
Разбор файла данных 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.