Восстановление работоспособности файловой базы. 2. Лечение

14.04.13

Задачи пользователя - Корректировка данных

Восстановление работоспособности разрушенной файловой базы. Этап 2. Лечим базу.

Продолжение. Предыдущие этапы:

0. Введение

1. Обследование


Этап 2. Лечим базу.

На данном этапе рассмотрим пути исправления различных ошибок в файловой БД при помощи скриптов, использующих возможности компоненты 1CDLib. (Под скриптом здесь понимается обработка 1С:Предприятие 8.2, загружающая указанную компоненту либо из макета, либо из файла на диске, и содержащая определённый код на встроенном языке 1С, с использованием функций компоненты. Пример такой обработки есть в публикации, посвящённой компоненте).

В общем виде, скрипт выглядит так:

 

    FileDB=Новый("AddIn.T1CDLib.DB1CD");
   
FileDB.OpenLogFile(ИмяЛога);
   
Состояние("Чтение структуры файла");
   
FileDB.Open1CDFile(ИмяФайла);
   
Состояние("Обработка файла");

   
// здесь выполняем различные операции по лечению базы

   
FileDB.CloseFile();
   
FileDB.CloseLogFile();

   
Состояние("");


В зависимости от списка проблем, составленного на этапе обследования, можно выполнить различные операции:

  • 1. Если в заголовке базы указан неверный размер, то исправляем заголовок:

        FileDB.FixMainStreamHeader();

  • 2. Если есть таблицы с некорректным размером одного или нескольких объектов (описание, записи, BLOB, индексы):
  •     FileDB.FixTableHeaders("TABNAME",Истина,Истина,Истина,Истина);

       
    В моей практике бывали случаи, что chdbfl.exe при некорректном размере объектов какой-то таблицы не мог восстановить добрую половину данных этой таблицы, а вот после исправления размеров "терял" буквально пару-тройку записей, и это безо всякого изменения содержимого объектов такой таблицы.
        
    3. Если есть некорректные записи в корневом объекте RootEntry:
    Вывести содержимое корневого объекта в лог-файл можно так:

        FileDB.PrintRootEntry();

    Удалить некорректную запись по индексу (нумерация - с 1) из корневого объекта:

        FileDB.DeleteTableFromRootEntry(ИндексЗаписи);

       
    Если содержимое какой-то потерянной таблицы нашлось в недрах файла БД (например, при помощи поиска в Hex-редакторе), но ссылка на неё отсутствует в корневом объекте, можно её добавить:

        FileDB.AddTableToRootEntry(ИндексБлокаЗаголовкаОписанияТаблицы);

       
    Внимание: после манипуляций с корневым объектом нужно переоткрыть БД:

        FileDB.CloseFile();
       
    FileDB.Open1CDFile(ИмяФайла);

  • 4. Если в перечне таблиц базы есть таблицы с окончаниями "OG", это означает, что база рухнула в процессе реструктуризации или ТиИ. В данном случае может помочь такая операция (удаление окончания из имени таблиц):

        ArrayPres=FileDB.GetTablesArray(Ложь);
       
    TablesArray=РазвернутьЗначение(ArrayPres);

        Для
    TabInd=1 По TablesArray.Count() Цикл
           
    TableInfo=TablesArray[TabInd-1];
           
    TableName=TableInfo.Name;
            Если
    ВРег(Прав(TableName,2))="OG" Тогда
               
    МасПереимТаб.Добавить(TableName);
            КонецЕсли;

        КонецЦикла;

       
    Состояние("Переименование таблиц");

        Для каждого
    ТекТаб из МасПереимТаб Цикл
           
    FileDB.RenameTable(ТекТаб,Лев(ТекТаб,СтрДлина(ТекТаб)-2));
        КонецЦикла;

       
    Однако, надо понимать, что содержимое таких таблиц может не соответствовать текущей конфигурации БД. В случае ТиИ вероятность несоответствия невысока, а вот при прерванном обновлении может быть по-разному, но, в любом случае, попробовать стоит.

  • 5. Если содержимое каких-то таблиц безвозвратно потеряно, но есть не очень старый бэкап, то можно восстановить данные этих таблиц по состоянию на дату бэкапа:

        МасПереносТаб=Новый Массив;
       
    МасПереносТаб.Добавить("Reference19");
       
    МасПереносТаб.Добавить("Document192");

       
    ПапкаБазы="ПутьКПроблемнойБазе";
       
    ПапкаБазыПред="ПутьКБазеИзБэкапа";
       
    ИмяФайла=ПапкаБазы+"1Cv8.1CD";
       
    ИмяФайлаПред=ПапкаБазыПред+"1Cv8.1CD";

       
    FileDB=Новый("AddIn.T1CDLib.DB1CD");
       
    Состояние("Чтение структуры файла");
       
    FileDB.Open1CDFile(ИмяФайла);

       
    FileDB2=Новый("AddIn.T1CDLib.DB1CD2");
       
    FileDB2.Open1CDFile(ИмяФайлаПред);

       
    Состояние("Перенос таблиц");

        Для каждого
    ТекТаб из МасПереносТаб Цикл
           
    TableName=ТекТаб;
           
    ПапкаТаб=ПапкаБазыПред+TableName+"\";
           
    ВремКат=Новый Файл(ПапкаТаб);
            Если (НЕ
    ВремКат.Существует()) Тогда
               
    СоздатьКаталог(ПапкаТаб);
            КонецЕсли;

           
    FileNameDescription=ПапкаТаб+"Description";
           
    FileNameRecords=ПапкаТаб+"Records";
           
    FileNameBLOB=ПапкаТаб+"BLOB";
           
    FileNameIndexes=ПапкаТаб+"Indexes";

           
    FileDB2.SaveTableDataToFile(TableName,FileNameDescription,FileNameRecords,FileNameBLOB,FileNameIndexes);

           
    FileDB.LoadTableDataFromFile(TableName,FileNameDescription,FileNameRecords,FileNameBLOB,FileNameIndexes);
        КонецЦикла;

       
    FileDB.CloseFile();

       
    FileDB2.CloseFile();

  • Естественно, ссылки на элементы этих таблиц, созданные после бэкапа, будут "битыми", однако это всё же лучше, чем ничего.


Нумерация пунктов соответствует рекомендуемому порядку операций: т.е., сначала нужно исправить заголовки базы и таблиц, затем "разобраться" с корневым объектом, а затем уже приступать к манипуляциям с таблицами.

Также нужно помнить, что после всех проделанных манипуляций очеь полезно "шлифануть" базу утилитой chdbfl.exe с установленной галкой "Исправлять обнаруженные ошибки". Эта процедура перепакует данные всех таблиц, избавив их от мусора и удалённых записей, а также полностью перестроит индексы (а из-за "протухших" индексов база может по-прежнему не запускаться ни в одном из режимов, хотя сами данные могут быть уже восстановлены полностью).

 



В следующей статье будут рассмотрены различные ситуации при наличии проблем в конфигурации (таблицах CONFIG и CONFIGSAVE).

См. также

Тестирование и исправление ключей аналитики ERP, УТ11, КА

Корректировка данных Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    103870    616    167    

654

QR -кодирование документов БЕЗ изменения печатных форм, с произв. алгоритмами создания QR -кода и обработки (в т.ч прикрепление сканов к документам) для УТ 11 (все), ERP 2, КА 2, Розница 2, УНФ 1.6/3.0, БП 3, ЗУП 3

Корректировка данных Платформа 1С v8.3 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Представьте, что есть система, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.1 от 09.11.2023!

8400 руб.

26.08.2018    49563    12    60    

53

Заполнение документа "Корректировка регистров" произвольными данными

Закрытие периода Корректировка данных Платформа 1С v8.3 Система компоновки данных 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    49320    165    29    

116

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    21130    295    35    

65

Помощник исправления порядка расчетов

Взаиморасчеты Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Бухгалтерский учет Управленческий учет Платные (руб)

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

7200 руб.

02.11.2020    6506    4    0    

7

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4320 руб.

06.10.2023    843    3    5    

5

Групповое изменение реквизитов номенклатуры для УТ 11/КА 2

Загрузка и выгрузка в Excel Корректировка данных Платформа 1С v8.3 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Обработка для группового редактирования реквизитов номенклатуры. Позволяет редактировать реквизиты (как основные, так и дополнительные реквизиты и сведения) непосредственно в таблице, устанавливать новые значения реквизитов на выбранную номенклатуру, а также загружать новые значения из Excel. Предусмотрена возможность добавления фото к товарам перетаскиванием файла из проводника на строку с товаром (drag'n'drop)

4200 руб.

16.11.2020    16920    11    5    

10

Автоматическая корректировка НДФЛ в ЗКГУ

Корректировка данных Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Налоговый учет НДФЛ Платные (руб)

На этот раз действительно автоматическая корректировка НДФЛ! С помощью данной обработки можно автоматически скорректировать НДФЛ, не тратя целые часы на его ручную корректировку. Можно в считанные минуты изменить НДФЛ по всем сотрудникам в организации. Что бережет деньги на оплату специалиста и время! Обновлена и адаптирована к новым правилам исчисления и удержания НДФЛ с 01.01.2023 г.

4500 руб.

23.06.2022    11078    77    32    

40
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DragonAgo 13 15.04.13 09:27 Сейчас в теме
Полезная статья, еще для серверных баз, только там больше ошибок, и все скорее всего просто не описать будет
2. TrinitronHome 15.04.13 20:06 Сейчас в теме
спасибо за данную статью, очень полезная информация для меня
3. soba 16.04.13 16:20 Сейчас в теме
Да, весьма подробно изложено. Спасибо, похоже пригодится совсем скоро.
4. teller 17.04.13 09:53 Сейчас в теме
(3) soba, похоже кого-то отговорил от резервного копирования и ТиИ ?
5. soba 17.04.13 13:50 Сейчас в теме
Все проще. Бывают ситуации, когда ошибка в базе замечена спустя некоторое время, а данных уже навводили по самое небалуйся. Или еще пример. При переходе с БП2.0 на бухгалтерию строительной организации методом грубой силы загрузкой конфигурации без сравнения и объединения (спасибо заботливым разработчикам Импульса) кое-что нужно править :)
6. wirg 17.04.13 15:18 Сейчас в теме
Интересно
7. denis1c@ 9 18.04.13 00:09 Сейчас в теме
А можно ли вылечить файловую базу ЗУП, если утилита chdbfl.exe и ТиИ ни чего не находят, база запускается, работает нармально, но при групповом расчете НДФЛ база падает со словами "Недостаточно памяти"?
8. andrewks 1363 18.04.13 08:06 Сейчас в теме
(7) denis1c@, а почему Вы решили, что база содержит физические ошибки?
сколько сотрудников? какой релиз платформы и конфы?
9. yandextesting 147 18.04.13 10:25 Сейчас в теме
(7) недавно сталкивался с подобным вопросом, проблема оказалась в неверно заполненной дате документа по одному из сотрудников: вместо 2013 года был указан 0013 год н.э. :) В результате ЗУП пыталась выполнить какие-то расчеты за пару тысяч лет... Вероятность того, что это проблема БД крайне мала, на мой взгляд - копайте данные.
13. denis1c@ 9 18.04.13 23:06 Сейчас в теме
(9) Благодарю за наводку. Открыл регистр сведений "НДФЛ сведения о доходах" и увидел такую картину: Месяц налогового периода - февраль 0013 г. Оказывается в системе ввели документ начисление по б.л. этой датой.
Спасибо всем за помощь. Проблема решена.
10. mdie 86 18.04.13 12:56 Сейчас в теме
(7) denis1c@, запустите под отладчиком в режиме замера производительности и найдете момент "распутывая" от места проблемы. К тому же недавно также пришлось такое лечить, когда период регистрации/начисления у НДФЛ указали лет на 200 больше.
А автору огромное спасибо за тулзу - реально помогла поднять базу с минимальными потерями.
11. s_uu 22 18.04.13 17:34 Сейчас в теме
А каков физический предел размера файловой базы данных?
12. andrewks 1363 18.04.13 17:40 Сейчас в теме
(11) s_uu, теоретически его нет. есть ограничение на размер каждого из объектов таблицы (записи, блобы, индексы) - чуть менее 4 Гб. Самих таблиц может быть очень много.

естественно, что на практике не всё так хорошо, но и не всё зависит от размера. если с базой активно работают более 5-ти человек одновременно, уже можно задумываться о серверной архитектуре, но есть и базы, прекрасно работающие и с 10-ю активными пользователями. так что всё индивидуально
22. KazanKokos 9 02.03.17 16:19 Сейчас в теме
(12) Под rdp в файловой базе может работать до 30 чел и больше. хотя конечно от 30 лучше даже в этом режиме переходить на 1с-сервер. В сети по share база и на 2-3х пользователях виснет и ломается бывает. 4-5 уже много :)
14. SeiOkami 3235 19.04.13 12:06 Сейчас в теме
Круто было бы, если кто-нить сделает обработку для лечения базы всеми возможными способами =)
15. andrewks 1363 19.04.13 13:11 Сейчас в теме
(14) SeiOkami, в данном вопросе универсализм не то, чтобы невозможен, а, скорее, вреден.

на мой взгляд, правильный алгоритм именно такой - анализ и фиксация проблем, потом - написание/применение "лечебного" скрипта, исправляющего конкретные проблемы конкретной базы
16. SeiOkami 3235 19.04.13 15:04 Сейчас в теме
(15) это, конечно, да. Однако, если сделать что-то вроде помощника диагностики проблем и по результатам задаваемых вопросов предлагать то или иное решение. Как в Windows... только рабочее =)
17. AVK_Alex 4 22.04.13 21:56 Сейчас в теме
Было бы удобно различные инструменты собрать под один GUI, да еще и с парсером логов... ну... и для полноты еще гравицапу добавить :)
18. shira84 222 26.04.13 14:46 Сейчас в теме
полезно
19. zels 171 15.04.14 23:44 Сейчас в теме
Диск при чтении дает ошибки CRC в районе 8-10Мб от начала файла 1CD (БП2.0). Если там находится конфигурация поставщика, то можно ее взять из старого архива и перенести в копию 1CD (где сбойные блоки забиты нулями)?

Не стал разбираться - написал програмку, которая склеивает два 1CD-файла в один и все заработало.
Вот ссылка: Склеивание двух 1CD-файлов в один
20. andrewks 1363 17.04.14 13:37 Сейчас в теме
(19)
Если там находится конфигурация поставщика, то можно ее взять из старого архива и перенести в копию 1CD (где сбойные блоки забиты нулями)?


да, можно
21. sss999 48 02.03.17 16:14 Сейчас в теме
подскажите как удобнее искать частичные данные таблицы что бы восстановить, так как саму таблицу не находит ни какая программа, и как понять есть ли правильная запись по ней в парамс или сама таблица повреждена, если повреждено описание то как посмотреть целые ли данные?
23. sss999 48 02.03.17 16:41 Сейчас в теме
скрипт не может переименовать таблицы ошибка компоненты на методе ренэйм, что не так?переименовывает с og на не og
24. sss999 48 02.03.17 16:50 Сейчас в теме
подскажите как вытащить данные таблицы в hex, программно не выходит, таблица с og на конце
25. sss999 48 02.03.17 17:19 Сейчас в теме
ну все равно спасибо за скрипт, хоть смог его запустить и что-то сделать
26. sss999 48 04.03.17 19:52 Сейчас в теме
как получить число подскажите ИндексБлокаЗаголовкаОписанияТаблицы
27. Artem108 16.08.17 11:38 Сейчас в теме
База вылетает с ошибкой "не обнаружена таблица "_ACCUMRGT17934". Развернул архив, там эта таблица есть. подскажите можно ли ее отдельно перенести в поврежденную базу? как это сделать?
28. msorina 11.12.18 17:18 Сейчас в теме
База вылетает без сообщений на выполнении команды
FileDB.OpenTable(0,"CONFIGSAVE");
в предлагаемом Вами коде:
FileDB=Новый("AddIn.T1CDLib.DB1CD");
Состояние("Чтение структуры файла");
FileDB.Open1CDFile(ИмяФайла);
FileDB.OpenTable(0,"CONFIGSAVE");

релиз платформы 8.3.11.2867, база была создана на релизе 8.3.11.2899.

Помогите, пожалуйста, очень нужно срочно восстановить базу данных, которая пострадала при незначительном изменении конфигурации, но доступ к бэкапам оказался потерян.
Оставьте свое сообщение