Предупреждения, отказ от ответственности:
Разработчик данной обработки не может нести и не несет ответственность за любой ущерб, полученный при использовании данного программного продукта. Рекомендуется использование этого программного продукта на копиях баз.
Сначала благодарности:
В первую очередь выражаю огромную благодарность Валерию Агееву (awa) - автору статей о формате файлов 1CD и утилиты Tool_1CD.
Также выражаю благодарность andrewks за статьи о восстановлении работоспособности файловой базы, которые помогли глубже разобраться со структурой файлов 1CD.
Благодарю Алексея Ермилова (Alex_E) за помощь в создании обработки.
Также благодарю Андрея Лукина за внешнюю компоненту для работы с deflate.
Функционал:
- Просмотр базы 1CD из любой другой конфигурации на управляемых формах (работает в "Такси")
- Поддержка форматов 8.2.14.0 и 8.3.8.0.
- Просмотр общей информации о таблицах базы (описание, размер записи, данные, BLOB, индексы и т.д.)
- Просмотр общей информации о полях таблицы (тип, длина, NULL и т.д.)
- Просмотр записей таблиц
- Работа с полями BLOB:
- просмотр в 16-ричном виде
- просмотр в виде текста (используется ВК для распаковки deflate)
- сохранение значения поля BLOB в файл
- Возможность выгружать файлы таблицы: Файл данных, Файл BLOB, Файл индексов
- 16-ричный вьюер страниц базы
- Консоль кода 1С (КК) для вывода любой необходимой информации
- Для записи в базу можно использовать скрипты на языке 1С в консоли кода. Для этого есть функция постраничной записи База1С_ЗаписатьСтраницыПоНомеру(...)
Для чего можно использовать:
- Изучение физического представления базы
- Выгрузка данных на низком уровне
- Навигация по поврежденным базам (с ограничениями) для выявления повреждений. С помощью этой обработки были выявлены дефекты 3 "битых" баз, 2 из них полностью восстановлены. Для выявления дефектов писались скрипты для консоли кода, исправления вносились через сторонний 16-ричный редактор.
- Можно рассматривать как пример работы с бинарными данными (функции обработки можно использовать для любых других файлов, например, для графических или звуковых)
Особенности работы:
Само двоичное чтение осуществляет ActiveX "SAPI.spFileStream", установленный практически в любой Windows, дальше идет работа средствами языка 1С через COMSafeArray. Кому интересно, простой пример работы из 1С с этим ActiveX - http://forum330.com/forum/86/all Документация - http://msdn.microsoft.com/en-us/library/ms722561%28v=vs.85%29.aspx
Интерфейс:
Почти весь функционал этой обработки был написан в рамках рабочей задачи, которая не требовала интерфейса. В итоге для этой обработки интерфейс был просто "прикручен" и дописано немного функций, а чтобы не изобретать велосипед, интерфейс был сделан похожим на интерфейс утилиты Tool_1C, автором которой является awa, без поддержки функций записи в базу из интерфейса.
Информация о таблице:
Информация о полях таблицы:
Операции над файлами таблицы:
Просмотр записей таблиц:
При чтении данных таблицы добавляются поля, начинающиеся с префикса "B1C_". В поле "B1CD_Deleted" записывается признак удаленной записи (для записи, помещенной в таблице на удаление, устанавливается ИСТИНА).
Для полей типа BINARY выводится строка вида #BLOB,<Тип>,<БЛОКНАЧАЛА>,<РАЗМЕР>. Например, #BLOB,I,1,19024.
|
16-ричный просмотр страниц базы:
Консоль кода (КК):
Обработка содержит примеры скриптов. Вот, например, простой скрипт для получения DBNames из таблицы PARAMS:
лДатаС = ТекущаяДата();
лИмяТаблицы = "PARAMS";
лТекТаб = КК_ПолучитьСтруктуруТвблицыПоИмени (лИмяТаблицы);
мсЗаписи = Х1С_Б1СД_ПолучитьЗаписиТаблицы (лИмяТаблицы,,,,,3,Истина);
лСтрокаБлоб = "";
Для Каждого цЗапись Из мсЗаписи Цикл
Если цЗапись["FILENAME"] = "DBNames" Тогда
лСтрокаБлоб = цЗапись["BINARYDATA"];
Прервать;
КонецЕсли;
КонецЦикла;
стрБлоб = База1С_ПолучитьСтруктуруBLOBИзСтроки (лСтрокаБлоб);
хБуфер = База1С_ПолучитьДанныеБлоб (лТекТаб.ФайлБлоб, стрБлоб.НомерБлока, стрБлоб.Размер);
лТекст = База1С_РаспаковатьБуфер (хБуфер);
КонсольКода_ОкноОтладки = лТекст;
лСекунд = ТекущаяДата() - лДатаС;
Сообщить("Выполнено за (сек): "+лСекунд);
Ограничения и работоспособность:
Версии до 2.0 тестировались на Windows 8 (32 bit) и на релизе платформы 8.3.5.1119.
Версия 2.0 тестировалась на Windows 10 Home (64 bit) и на релизе платформы 8.3.14.1630.
На данный момент не на все варианты повреждений файла 1CD есть проверка, этот функционал планируется доработать в будущем.
Планы по развитию функционала:
Сделать возможность редактирования страниц базы в 16-ричном режиме;
Для чтения двоичных данных использовать БуферДвоичныхДанных вместо компонент ActiveX;
Автоматическое выявление некоторых повреждений баз;
Работа с базой в "Режиме поврежденной базы";
Запись в базу ранее выгруженных и измененных данных;
Жду содержательных комментариев и замечаний по обработке.
История версий:
0.0.2.8a от 02.10.2014 Первая публичная версия (альфа)
0.0.3.0a от 24.01.2015
Новое в версии:
- добавлена возможность вывода записей таблиц (функции чтения таблиц пока находятся в состоянии тестирования)
- ускорена работа с файлом 1CD (spMemoryStream)
- ускорена работа HEX-просмотра
- ускорено открытие базы примерно в 2 раза (3500 таблиц около 15 секунд)
- добавлена форма выхода
- добавлена форма предупреждения при выгрузке файла
- добавлена обработка типа поля T (text)
- исправлена ошибка повторного сохранения
- исправлены другие мелкие ошибки
2.0.3.20a от 11.04.2019
Новое в версии:
- Поддержка формата 8.3.8.0
- Работа с BLOB:
- просмотр в 16-ричном виде
- просмотр в виде текста (используется ВК для распаковки deflate)
- сохранение значения поля BLOB в файл
- Оптимизирована работа с памятью при работе с полями BLOB
- Ускорение некоторых операций с файлами и полями BLOB
- Сохранение и загрузка записей таблиц в MXL-фвйлы для ускорения работы с таблицами с большим количеством записей
- FIX: исправлена ошибка при просмотре записей и выгрузке больших файлов (DATA и BLOB)
- FIX: исправлена ошибка при выводе неверной версии формата 1CD
- FIX: исправлены другие мелкие ошибки