Восстановление работоспособности файловой базы. 3. Конфигурация

21.04.13

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

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

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

0. Введение

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

2. Лечение


Этап 3. Лечим конфигурацию.

Проблемы в таблицах конфигурации - одна из самых частых причин "падения" файловой БД. Последствия бывают как лёгкие (невозможность открытия определённых объектов в режиме Предприятия и/или Конфигуратора, обновления конфигурации), так и тяжёлые (невозможность открытия БД ни в режиме Предприятия, ни в режиме Конфигуратора).


Как мы помним, конфигурация хранится в двух таблицах: CONFIG - содержит файлы конфигурации БД, CONFIGSAVE - содержит файлы основной (сохранённой, редактируемой) конфигурации. Если на этапе обследования были выявлены проблемы в этих таблицах ("битые" записи/файлы, существенно меньшее количество файлов по сравнению с типовой конфигурацией или конфигурацией из последнего бэкапа (это не касается таблицы CONFIGSAVE, т.к. для неё уменьшение количества записей может являться нормальной ситуацией, означающей, что изменения из основной конфигурации перенесли в конфигурацию БД), наличие файлов с окончаниями ".new" в имени, и пр.), то пора приступать к их лечению (для этого прибегнем к помощи компоненты 1CDLib).

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

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

   
FileDB.OpenTable(0,"CONFIGSAVE");
   
FieldFileName="FILENAME";

   
Состояние("Перебор записей");
   
Рез=FileDB.MoveFirstRecord(0);
    Пока
Рез Цикл
        Если НЕ
FileDB.IsRecordDeleted(0) Тогда
           
FileDB.DeleteRecord(0);
        КонецЕсли;

       
Рез=FileDB.MoveNextRecord(0);
    КонецЦикла;

   
FileDB.CloseFile();



В результате основная конфигурация будет приведена к конфигурации БД.


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

Теперь перейдём к таблице CONFIG. Если содержимое этой таблицы сильно повреждено, пути восстановления следующие:

  • 1.Если есть бэкап, с момента которого изменения в конфигурацию БД не вносились, или вносились незначительные изменения, не повлёкшие за собой реструктуризацию БД, то самый простой путь - перенести данные этой таблицы из бэкапа:

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

       
    ПапкаБазы="ПутьКПроблемнойБазе";
       
    ПапкаБазыПред="ПутьКБазеИзБэкапа";
       
    ИмяФайла=ПапкаБазы+"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();

  • Естественно, конфигурация откатится на момент бэкапа, т.е., если за это время были внесены какие-то изменения в модули или макеты, то они будут утеряны.
  • 2. Если конфигурация является полностью типовой, либо типовой с незначительными изменениями, не повлёкшими за собой реструктуризацию БД, и которыми можно пренебречь, то можно перенести конфигурацию из развёрнутой новой базы с типовой конфигурацией. Но здесь есть одна проблемка - как точно узнать нужный релиз, если база не открывается ни в одном режиме? Выход есть: открываем декомпрессированное содержимое файла "root" - там мы увидим GUID нужного нам файла (например, для БП 2.0 это "e0666db2-45d6-49b4-a200-061c6ba7d569"), далее открываем декомпрессированное содержимое этого файла - там, недалеко от начала файла, мы увидим название конфигурации, редакцию, название и копирайты разработчика, и, что самое важное, номер релиза.
  • Номер релиза
  • Далее - дело техники, нужно найти нужный релиз типовой конфигурции и перенести содержимое таблицы CONFIG в нашу проблемную базу. (Извлечь содержимое таблицы CONFIG можно при помощи обработки ViewRecords.epf из 1. Обследование.)
  • 3.Если база рухнула во время обновления конфигурации БД (характерным признаком этого является наличие файлов с окончаниями ".new" в имени), то может помочь вот такой скрипт (удаляет файлы с окончаниями ".new"):

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

       
    FileDB.OpenTable(0,"CONFIG");
       
    FieldFileName="FILENAME";

       
    Состояние("Перебор записей");
       
    Рез=FileDB.MoveFirstRecord(0);
        Пока
    Рез Цикл
            Если НЕ
    FileDB.IsRecordDeleted(0) Тогда
               
    FileName=FileDB.ReadSimpleValue(0,FieldFileName);
                Если (
    Прав(FileName,4)=".new") Тогда
                   
    FileDB.DeleteRecord(0);
                КонецЕсли;
            КонецЕсли;

           
    Рез=FileDB.MoveNextRecord(0);
        КонецЦикла;

       
    FileDB.CloseFile();

В данной статье приведены наиболее типичные скрипты. Путей восстановления конфигурации, конечно, намного больше, можно написать любой скрипт с использованием функций компоненты 1CDLib - переименование, удаление файлов по определённым условиям, перенос определённых файлов из другой базы, и т.д.
Например, рецепты восстановления клиент-серверных БД типа //infostart.ru/public/138797/ (приведён рецепт лечения после неудачного динамического обновления) легко и непринуждённо можно применять и для файловых баз, причём безо всяких лазаний в дебрях файла БД с Hex-редакторами и прочими "напильниками".
Сравните, например, шаманские танцы с бубном в //infostart.ru/public/154556/ , которые ещё и не всегда могут увенчаться успехом, и простенький скрипт

    FileDB.OpenTable(0,"CONFIG");
   
FieldFileName="FILENAME";

   
Состояние("Перебор записей");
   
Рез=FileDB.MoveFirstRecord(0);
    Пока
Рез Цикл
        Если НЕ
FileDB.IsRecordDeleted(0) Тогда
           
FileName=FileDB.ReadSimpleValue(0,FieldFileName);
            Если (
FileName="сommit") ИЛИ (FileName="dbStruFinal") Тогда
               
FileDB.DeleteRecord(0);
            КонецЕсли;
        КонецЕсли;

       
Рез=FileDB.MoveNextRecord(0);
    КонецЦикла;




Надеюсь, что данная статья поможет Вам в восстановлении базы, но ещё лучше не забывать про ежедневные бэкапы.

См. также

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

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

60000 руб.

06.10.2023    4501    37    18    

45

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    33800    108    152    

75

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

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

3600 руб.

10.02.2017    111366    669    174    

708

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

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

19200 руб.

26.08.2018    52612    16    61    

55

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

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

12000 руб.

02.11.2020    7526    6    0    

8

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

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

2400 руб.

13.07.2015    51363    175    29    

127

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для ООО для смены системы налогообложения УСН на ОСНО, без ведения раздельного учета, входящего НДС по способам учета. При реализации перехода в операции формируются проводки по выделению НДС, который ранее учитывался в стоимости номенклатуры, регистр «НДС Предъявленный».

6000 руб.

22.01.2025    257    1    0    

3

Корректировка данных Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Налоговый учет Налог на прибыль Платные (руб)

Обработка служит для: выравнивания бухгалтерского и налогового учета на определенную дату по выбранным счетам; закрытия остатков по выбранным счетам; обнуления налогового учета (ПР, ВР также будут обнулены)

2880 руб.

05.05.2024    699    10    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1375 22.04.13 07:00 Сейчас в теме
данная статья (предварительно) завершает цикл
2. TrinitronHome 22.04.13 17:55 Сейчас в теме
большое спасибо вам за данную статью, очень содержательно и полезно для меня, как начинающему осваивать платформу v8
3. ЮлияМ 23.04.13 00:29 Сейчас в теме
Спасибо большое. Грамотно и интересно изложена статья.
4. fibrsb 23.04.13 15:53 Сейчас в теме
5. DAnry 9 24.04.13 17:58 Сейчас в теме
Спасибо, очень доходчиво!
6. LexSeIch 212 29.04.13 10:10 Сейчас в теме
Мир этому дому!
Пока не доводилось восстанавливать БД подобными методами (больше надеюсь на Бэкап еще и территориально разнесенный...), но взял статью на заметку. Спасибо.
7. shira84 226 30.04.13 08:41 Сейчас в теме
Автор молодец. Не поленился, не пожадничал и поделился опытом. (я про все статьи в целом).+++++
8. pumbaE 31.05.13 08:29 Сейчас в теме
А подскажи каким образом можно сохранить конфигурацию из таблицы "CONFIG" ?
9. andrewks 1375 31.05.13 08:42 Сейчас в теме
(8) pumbaE, сохранить в cf? или перенести в другую базу?
10. pumbaE 31.05.13 09:41 Сейчас в теме
(9) сохранить, интересно именно сохранить конфигурацию в cf файл.
Штатное сохранение конфигурации очень долго делается. Для SQL есть решения от Dmitro (GameWithFire) , а для файлового варианта не быстрого сохранения. Хочется из снегопата сделать быстрое сохранение cf файла , для последующего фонового разбора в git.
11. Модератор раздела 31.05.13 10:21 Сейчас в теме
(10) +1
Нужная задача.
И просто быстрое сохранение конфигурации не помешает :)
Сейчас невозможно из командной строки вытащить конфигурацию из файла 1С :(
12. andrewks 1375 31.05.13 10:27 Сейчас в теме
(10) pumbaE, а зачем сохранять (паковать) в cf, чтобы потом его тут же разбирать(распаковывать)?
это же дольше получится.
мне кажется, проще и быстрее напрямую тянуть записи (объекты) из таблички
13. pumbaE 31.05.13 11:52 Сейчас в теме
(12) что-бы потом отдельной задачей распаковать его с помощью 8.3.
Прочитать можно, только ведь все во внутреннем формате, а хотелось бы в понятном для последующей сборке для 1С.

Альтернативные системы контроля версий выигрывают у хранилища возможностью вести не только линейную историю версий, но к сожалению хранилище в плане помещения одного объекта выигрывает в скорости. Хотелось бы для разработчика сделать прозрачную систему: надо закомитить, делаем быстрое сохранение конфигурации и комитим именно cf файл, при этом в фоне стартуем задачу по разбору из cf файла в xml с помощью 8.3 и аналогичный коммит только в другую ветку.

В этом случаи мы получаем скорость, я надеюсь на это, и альтернативные системы контроля версий. Но хотелось бы еще и быстрого сохранения именно cf файла.
14. andrewks 1375 31.05.13 13:08 Сейчас в теме
(13) pumbaE, а скорость сохранения в cf тулзом от Валерия awa не устраивает?
15. pumbaE 31.05.13 13:14 Сейчас в теме
(14) устраивает :). Даже попросили Валерия в командный режим вынести возможность выгрузки cf файла, но я еще хотел бы с помощью твоей компоненты на linux тоже такое проворачивать (надеюсь снегопат на qtscript не за горами и любимая кдешечка начнет дома работать в полной мере).
16. andrewks 1375 31.05.13 13:31 Сейчас в теме
(15) pumbaE, а, теперь понял, вопрос в линуксе.
запишу в свои будущие планы, только по срокам не сориентирую - свободного времени в обрез
17. Ele1234567 23.12.13 10:21 Сейчас в теме
18. San4opa 11.04.18 01:04 Сейчас в теме
У меня когда доходит до кода OpenMetadata() или OpenTable вылетает 1с. подскажите плиз в чем дело как обойти?
19. Oleshko_G 16.03.20 14:53 Сейчас в теме
Андрей, привет
Файл базы восстановлен после вируса шифровальщика.
При открытии и в режиме Предприятие и Конфигуратор:
Файл базы данных поврежден

chbfl много раз :
Повреждена таблица размещения внутреннего файла <Описание базы данных>

Tool1CD много раз:
Попытка чтения блока за пределами файла

И в конце "файл не является базой 1С."

Что возможно сделать для восстановления?
20. Online-Ufa 16.03.20 16:26 Сейчас в теме
(19)
Что возможно сделать для восстановления?

Восстановить архивную копию
Оставьте свое сообщение