Восстановление базы 1С с помощью HEX редактора

в 12:34, , рубрики: , hex, Восстановление данных, Песочница, системное администрирование, метки: , ,

Эта статья для тех, кто уже отчаялся в восстановление своей базы и полез за бэкапами. А именно: что делать когда базу 1С убила, так называемая «утилита тестирования физической целостности базы» chdbfl.exe и её подруга платформа 1С.

Кто не знает, chdbfl.exe — это стандартная программа восстановление и тестирования физической целостности базы 1С, входящая в комплект платформы. И всем уже давно известно что chdbfl.exe делает только хуже в большинстве случаев(в моей практике именно так).

А началось всё с очень банальной ошибки. Так как программисты из 1С очень любят мудрить, то во время очередного обновления 1С: Бухгалтерии вывалилось следующее:

Восстановление базы 1С с помощью HEX редактора

Сейчас то я знаю, что эта ошибка устраняется очищением кэша, но в то время я воспользовался именно chdbfl.exe и Конфигуратором(Тестирование и исправление). Ошибка ушла и я легко обновился. Но на следующий день раздался тревожный звонок бухгалтера: — Приезжай!

По приезду меня встретила 1С с выскакивающим дампом при открытии документа «Поступление товаров и услуг». Было решено сделать ещё раз вышеперечисленные пункты. И о чудо! Проблема была решена. Я с гордостью уехал из организации, но при этом забрал базу для тестирования на своём компьютере. Но не тут то было. Теперь уже другой документ вываливался с дампом. Было решено отложить всё на завтра и попытаться что-то сделать на своём компьютере. И на этот раз мне помогли такие же шаги, как и раньше. «Теперь всё» — думал я. Но не совсем.

Спустя 2 недели раздался очередной звонок: — Отчёты горят, приезжай срочно!

На этот раз было всё куда серьёзней. При пересчёте итогов 1С выдавала следующее:

Восстановление базы 1С с помощью HEX редактора

Отчёты, которые требуют итоги выдавали следующее:

Восстановление базы 1С с помощью HEX редактора

Как и раньше, я воспользовался теми же утилитами что и раньше, но результата это не дало. Как и не дало результата всяческие выгрузки/загрузки/сохранения. Обновление тоже не проходило по неизвестной мне причине:

Восстановление базы 1С с помощью HEX редактора

Это меня поставило в тупик на 2 дня. За эти дни было перепробовано почти всё. Многие советовали посмотреть план счетов и удалить лишние субконто у этого счёта. Но! Всё было типовое, никаких изменений не производилось.

Решение пришло внезапно и навеяно вот этой статейкой. Скачал все программы из статьи и начал «ковырять». Открыл файл базы в Tool_1CD и после получаса курения и понимания выяснилось что:

- _Acc — основная таблица плана счетов.
- _Acc_ExtDim — таблица видов субконто плана счетов, создается для плана счетов в том случае, если максимальное количество субконто больше нуля.

В моём случае это таблицы _АСС13 и _АСС13_EXTDIM446 соответственно:

Восстановление базы 1С с помощью HEX редактора

Итак, начинается самое интересное. Запоминаем поле _IDRREF нашего счета в таблице _АСС13:

Восстановление базы 1С с помощью HEX редактора

Переходим в _АСС13_EXTDIM446 и пытаемся найти этот идентификатор в поле _АСС13_IDRREF:

Восстановление базы 1С с помощью HEX редактора

Вот они, наши заветные субконто. Но ведь их должно быть три! Каким-то непонятным и странным образом Конфигуратор при реструктуризации и chdbfl.exe задвоили субконто этого счёта и поэтому выскакивала ошибка. Лишние нужно как-то удалить. Для этого нам понадобиться ещё одно поле из той же таблицы, _KEYFIELD. Запоминаем все значения лишних субконто. Должно получиться следующее:

5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b0
5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b1
5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b2
Для следующего шага нам понадобится HEX редактор. Открываем в нём наш файл базы. Тут я немного затормозил. Искал как только можно и где только можно строку 5724b6a1-5590-484e-a7c1-920ebbd1a385. Истина оказалась почти рядом. Нужно было искать не всё целиком, а по декадам цифр. Но тут опять подвох. Таких значений было очень много. И каким-то случайном образом я нашёл то, что мне было нужно, но в совершенно другом виде. Так, последовательность 5724b6a1-5590-484e-a7c1-920ebbd1a385 000001b0 в HEX редакторе была вот такая — a7c1920ebbd1a385484e55905724b6a1000001b0.

Восстановление базы 1С с помощью HEX редактора

И так с каждым субконто. Нужные нам строки:
a7c1920ebbd1a385484e55905724b6a1000001b0
a7c1920ebbd1a385484e55905724b6a1000001b1
a7c1920ebbd1a385484e55905724b6a1000001b2

Восстановление базы 1С с помощью HEX редактора

Осталось дело за малым. Изменим первую цифру кода на 9(можно взять любую другую, но нужно контролировать уникальность этого кода) и сохраним файл базы. Открываем всё это в 1С: Предприятие (для уверености можно ещё раз прогнать тестирование и исправление и chdbfl.exe) и радуемся восстановленной и рабочей базе.

Автор: gizer

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js