Как восстановить удаленный объект в 1С

Статья для версии 7.7, для 8.х смотрите
Введение
Многие из Вас, наверное, сталкивались с такой проблемой как, удаление элементов в справочниках, а значит, знают, какую кучу проблем это приносит. Я видал много способов восстановления порушенного справочника. Все их можно свести к следующему:
Заводится новый элемент справочника, аналогичный удаленному элементу, а потом он заносится во все документы, вместо удаленного элемента. Дальше все различается только способом занесения элемента в документы. Кто все исправляет в руки, кто пишет обработку — все зависит от опыта и квалификации исполнителя. После чего, необходимо перепровести все измененные документы. В общем, долгая и нудная работа, не всегда дающая 100% результат правильного восстановления. Есть, правда, один быстрый способ, основанный на формате DBF, точнее методах работы с ним.
Вот об этом мы и поговорим. Итак, что нам для этого надо. Иметь голову, наполненную мозгами, умелые ручки, знания основ перевода чисел из одной системы счисления в другую и любой редактор DBF файлов. Я, к примеру, использую winDBFview фирмы «Гэндальф».
Часть 1. Нам повезло.
С начала, собственно, о формате DBF и методах работы с ним. Думаю, рассказывать обо всем формате нет смысла, это тема отдельной статьи, поэтому расскажем о нем вкратце, для понимания тех действий, которые необходимо совершить.
Итак, что такое DBF формат и с чем его едят. Файл DBF можно разделить на две части: заголовок и, собственно, набор данных. В заголовке находится вся служебная информация, показывающая из каких полей состоит запись, типы этих полей, размер данных в полях, количество записей, размер записи, и откуда в файле начинаются записи, но это сейчас ни к чему. В наборе данных находятся, собственно, записи данных. В начале каждой записи стоит специальный байт — признак удаления. То есть когда вы говорите программе удалить запись, она ее фактический не удаляет, а ставит в первый байт записи метку о том, что данная запись удалена.
Отсюда следует, что если найти запись соответствующую удаленному элементу и сбросить признак удаления, переиндексировать базу, то можно обнаружить что, правильно удаленный
элемент будет восстановлен не только в справочнике, но всех документах.

Для тех, кто не знает что почем, показываю на примере:

Рабочая конфигурация ТиС, удалили элемент справочника товаров.
Запускаем winDBFview и выбираем Файл — Открыть. В появившемся окне диалога находим папку, в которую установлена база и открываем там файл. А какой? Вот ведь вопрос: как узнать? Да просто. Запускаем какую-нибудь оболочку, переходим в папку с базой и находим файл»1Cv7.DD». Открываем его для просмотра и находим там следующую строчку — «Справочник Номенклатура» — в нашем случае, у вас, вместо «Номенклатура» ставим название порушенного справочника (как он называется в конфигураторе) . И видим приблизительно следующее (см. рис. 1). То, что у меня выделено под надписью «Name» и есть искомое нами имя файла. Открываем его в редакторе DBF файлов, и смотрим. В поле CODE содержится код элемента справочника, а в поле DESCR наименование элемента. Как будете искать — уже дело техники и возможностей редактора. Найдя нужный элемент, сбрасываем байт пометки на удаления и сохраняем сделанные изменения.

Часть 2. Нам не повезло.
Но может быть, что вы не смогли быстро приехать к месту событий (всякое в жизни бывает). Приступили к восстановлению элемента. Запустили редактор. И начали искать и не нашли удаленный элемент. Куда он делся? Опять вернемся к формату DBF, и посмотрим, что происходит при добавлении новой записи. С начала программа ищет помеченные на удаление записи и если не находит, то добавляет новую запись. А если находит, вы правы, пишет вместо нее. И что делать, неужто опять все в руки?
Внимательно смотрим листинг файла «1Cv7.DD». Видите перед полем CODE поля ID и PARENTID. Для чего они нужны. Из описания поля (см. рис. 1), следует, что это какой-то идентификатор объекта. Оказывается 1С все равно, на тот код, что вы указали в справочнике элементов. Сама для себя она каждому объекту присваивает свой код. Значит, если мы узнаем этот код, то сможем создать запись полный аналог удаленной. Хм…. А как узнать этот код?
Есть много способов. Я, надеюсь, предлагаю вам самый простой. Итак, начнем.
Запускаем 1С. Лезем в Сервис — Монитор пользователей — Журнал регистрации. В появившемся диалоге делаем отбор: «во всем журнале, отбор по признаку удаление элемента справочника», жмем «ОК».
И смотрим журнал (см. рис. 2). Видите, там, где написано «Номенклатура 2258 04 ….», это и есть удаленный элемент справочника, его нам и надо восстановить. Сверху присутствует
строка: «<Объект не найден>(36201/)», 36201 — это и есть ID объекта. Создаем в справочнике новый элемент — полный аналог удаленному элементу. Выходим из 1С. Запускаем редактор, находим созданный нами элемент и поле ID ставим найденный. Внимательный читатель может сразу заметить существенное различие между соседними записями. Вот сейчас мы и переведем найденный идентификатор к нужному виду.

Перевод из одной системы счисления в другую, подробно изучается в школах и институтах, поэтому на этом останавливаться не будем. Изучив весь справочник, замечаем, что в идентификатор состоит из цифр и заглавных букв латинского алфавита. То есть может содержать все цифры от «0» до «9», и буквы от «A» до «Z». Значит, используется тридцати шестеричная система счисления 10 цифр плюс 26 букв. Приступим:

* 36201 делим на 36, получаем 1005 в остатке 21;
* 1005 делим на 36, получаем 27 в остатке 33;
В конце имеем три числа: 27, 33, 21. Заменяем их соответствующими значениями из приведенной ниже таблицы и получаем ID объекта RXL. Записываем его вместо ID созданного нами элемента.
Номер можно получить средствами самой 1С использую функцию _IdToStr() и наоборот получит десятичное число из его тридцати шестеричного представления _StrToId().
Запускаем 1С, индексируем базу и смотрим, что имеем (см. рис. 3)
Что и требовалось получить. Пользуйтесь.

При запуске 1C ошибка Файл базы данных поврежден 1Cv8tmp.1CD

5 / 5

Информация о материале Категория: Обзор программ Создано: 22.12.2017 01:30 Vitekus Просмотров: 9235

Сегодня столкнулся с проблемой что при запуске 1C выскакивает ошибка «Файл базы данных поврежден 1Cv8tmp.1CD».

Первая мысль которая пришла мне в голову что пришел пипец базе данных и мозг начал думать о криках воплях бухгалтера. (кто в такой сфере работает меня поймет)

Сразу решил проверить на другом ПК бухгалтера работает или нет. на удивление но второй бухгалтер продолжал нормально работать с этой базой.

От души отлегло приступил к изучению данного файла и за чем он нужен. По надписи в имени TMP я понял что это какой-то временный файл.

Закрыл 1С на этом компьютере и этот файл удалился при повторном входе на обоих пк ошибка не появлялась.

Почитав немного об этом файле в интернете понял.

Что в файле 1Cv8tmp.1CD сохраняется сесии пользователей которые подключены к базе.

Решение данной проблемы: Нужно завершить все сесии к данной базе данных 1C.

Закрыть все копии 1C которые обращяются к данной базе данных.

Какими методами восстанавливать разрушенные базы программы 1С:Предприятие 8,1

Зачем нужна эта статья

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

Стандартная документация программ 1С практически не затрагивает тему нештатной работы 1С:Предприятие; часто в этих статьях советуют использовать серверы с разными механизмами резервирования устройств, а также использовать источники бесперебойного питания; ну и, конечно же, иногда делать резервные копии, храня их на флешке, диске или дополнительных винчестерах

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

Методы восстановления данных

Сейчас мы расскажем немного о том, как поступать в случаях, когда резервной копии нет, а база при этом повреждена

1) запишите на бумаге дату и время, когда появились ошибки; это поможет намного быстрее найти и исправить ошибку, когда, например, вы будете просматривать логии. Если не помните точное время, запишите хотя бы приблизительное, или временные рамки, когда, по вашему мнению, могли начаться глюки и ошибки

2) запишите туда же текст ошибки, причем максимально точный – каждый символ и число из этого текста. Также нужно записать номер релиза СУБД, версию программы 1С:Предприятие, и ее текущую конфигурацию

— если возможно, сделайте скриншота экрана, когда на нем высветилась ошибка;

— сделайте пометку, может ли это быть результатом рассинхронизации узлов базы, или нет;

Например, текст ошибки может быть таким:

Ошибка SDBL:
Разрушена структура базы данных 1С:Предприятия. (pos=0)

Или на английском:

Иногда в MS SQL Server база данных может иметь статус Suspect

3) пока еще все помните и все находится в действии, попробуйте восстановить последовательность действий, которые вы делали до этого, и которые возможно были причиной возникновения ошибки;

— если в этом момент будете вносить изменения, сначала обязательно сделайте копию;

4) предложите вашему заказчику прислать базы данных с SQL Server’а или dt-файл, или же архивную копию каталога на адрес v8@1c.ru ;

— это обязательно нужно делать сразу, ведь если заказчик откажется, можно предложить ему платную версию ваших работ;

— для передачи данных в 1С нужно предоставить продукт, зарегистрированный в 1С, а также подписку на ИТС в текущем месяце; учтите, что сроки реакции 1С бывают медленные;

5) спросите у заказчика, какие резервные копии у его есть, или какие другие узлы базы; в дальнейшем их можно будет использовать для восстановления

— обязательно обратите внимание на актуальность этих копий – когда они были сделаны;

— для распределенных баз может быть полезен состав информации, которая регистрируется;

— спросите Заказчика о наличии dt-файла

6) определяем то, что вызвало ошибку – это описано во втором пункте;

— обычно источник ошибки – это MS SQL Server, но все равно нужно внимательно читать текст, исследовать ошибки PostgreSQL отдельно от ошибок MS SQL Server;

— бывает, что ответ уже заложен в источнике ошибки;

— стандартная документация программ 1С описывает такую возможную причины:

При запуске 1С:Предприятие начинает проверять, есть ли в информационной базе таблицы следующие элементы: Config, ConfigSave, Files, Params, _YearOffset, DBSchema, и если какого-то не находит, выдает сообщение о том, что ИБ разрушена

Еще один вариант описан сотрудников компании 1С:

Сообщение об ошибке может появляться в случае, когда отсутствует или заполнена поврежденными данными таблица под названием DBSchema, если в ней есть таблицы DBChanges и DBSchemaOG, но таблицы DBSchema DBSchemaOG не находятся

7) всегда можно поискать в Интернете решение для любого конкретного случая, в том числе того, который случился у вас;

7,1) если разрушена база в файловом варианте, в папке C:\Program Files\1cv81\bin можно найти утилиту под названием chdbfl.exe; используйте ее или попробуйте конвертирование в клиент-серверную версию; если это возможно, конечно;

7,2) В случае с СУБД PostgreSQL можно попробовать ввести команду pg_resetxlog, перед тем обязательно сделав резервные копии каталога DATA. Может быть, PostgreSQL таки запустится, но при этом потеряется часть данных;

7,3) При обменах данными. Войдя в режим предприятия, нужно сделать базу не подчиненной; далее выгрузите из центральной конфигурации и загрузите в периферийную базу, после этого снова сделайте периферийную базу подчиненной. Загружаем изменения в конфигурации, которые во время обмена были выгружены из центральной базы;

7,4) Когда найдены базы со статусом Suspect. Именно такой статус имеют базы, которые находятся в аварийном состоянии. Довольно часто причиной этого являются неполадки с журналом транзакций. Если попробовать подключить базу без журналов, может появиться такое сообщение про ошибку:

Для того чтобы решить такую проблему, можно создать новую базу с таким же именем, и аналогичными по имени и расположению файлами mdf и ldf; пропишите параметр базы autoclose в активное состояние, то есть введите autoclose = true

Тепер нужно подменить файл с расширением mdf. Можно также делать проверку физической целостности базы при помощи команды DBCC CHECKDB

Если сервер был остановлен, то сразу запускаем, не обращая внимания на статус базы, а в Query Analyzer выполняем такое:

Use master
go — позволяем изменять данные систeмных баз
sp_configure ‘allow updates’, 1 –- для 2000
reconfigure with override –- для 2000
go –- сохраняем значение
select status from sysdatabases where name = ‘имя базы’ –- для 2000
go –-изменяем статус данной базы
update sysdatabases set status= 32768 where name = » –- для 2000

alter database set emergency –- для 2005
go
После перезапуска SQL Server прописываем в командной строке следующее:

Net stop mssqlserver
Net start mssqlserver

База должна быть видимой, если работаем в режиме emergency mode

Дальше создаем новый Журнал транзакций и проводим полное тестирование вот так:

ALTER DATABASE <Имя БД> SET SINGLE_USER –- для 2005
GO
USE имя_базы
GO
DBCC CHECKDB(‘имя_базы’, REPAIR_ALLOW_DATA_LOSS)

/*Этот код ищет Журнал транзакций по старому пути. Если база уже находится на другом компьютере, то нужно создать временный пустой Журнал транзакций в той же папке и на том же диске, что и раньше. После восстановление можно его перенести

Если у вас не получилось перевести базу в singleusermode, то проверку целостности может получить сделать через dbo only mode, для этого просто уберите знак – в строке:*/

— sp_dboption », ‘dbo use only’, ‘true’
GO
sp_dboption », ‘single_user’, ‘false’ –- для 2000

alter database set multi_user –- для 2005
GO
USE master
GO — запрещаем изменения в системных базах
sp_configure ‘allow updates’, 0 –- для 2000
GO

7,5) Откат к конфигурации базы данных. Эта ошибка исправляется, если открыть конфигуратор данных с помощью ключей запуска /RollbackCfg;

7,6) При тяжелых случаях, когда не запускается конфигуратор, а то и конфигурация не открывается, можно использовать такое, но только для СУБД MS SQL Server 2005:

7,7) наиболее тяжелый случай, когда конфигурация испорчен дальше некуда, но она является стандартной или похожа на стандартную, а также в случае если известен ее номер:

— создает чистую конфигурацию из стандартной;

— используем скрипт из пункта 7,6, но в нем вместо

SELECT * FROM Config

Прописываем SELECT * FROM dbo.Config

— снова выполняем скрипт, но не для ., а теперь уже для .;

— делаем реструктуризацию и реиндексацию

— делаем обновление;

— выполняем ТиС, но с очисткой испорченных ссылок

Работает ли все это?

Конечно, гарантий успешности этих мероприятий никто не дает, но уже многим людям данные советы помогли; но самый главный совет – регулярно делайте бэкапы!

Теги материала: база, 1с, бухгалтерия, предприятие, сломалась база, зависла база, повредилась база, не открывается база

Время чтения: 6 мин.

При автоматическом обновлении типовой конфигурации 1С:Предприятие происходит создание архивной копий базы данных, и в этот момент вход в информационную базу блокируется на время выполнения процесса архивирования.

В случае возникновения нештатной ситуации (например, отключение электричества или компьютера, перезагрузка Windows и т.п.) вход в программу остается заблокированным, при попытке запуска выходит сообщение:

Для разблокировки базы в данном случае существует несколько вариантов:

1) Прописать команду в Дополнительных параметрах запуска 1С:

ENTERPRISE /F»<Путь к базе>» /CРазрешитьРаботуПользователей /UCРезервноеКопирование

Необходимо открыть окно 1С:Предприятие, в списке баз выбрать базу, которая заблокирована, и в меню справа выбрать пункт «Изменить», в открывшемся окне нажимаем кнопку «Далее».

Открывается окно «Редактирование информационной базы», здесь нам необходим пункт Дополнительные параметры запуска. В пустой строке прописываем команду:

ENTERPRISE /F»<Путь к базе>» /CРазрешитьРаботуПользователей /UCРезервноеКопирование

В данной команде необходимо прописать путь к заблокированной базе, в угловых скобках вместо «<Путь к базе>»:

В этот момент начинает запускаться база в режиме «Предприятия», необходимо выбрать пользователя и ввести пароль, процесс запуска происходит, но потом выкидывает — это нормально. После необходимо заново открыть окно 1С:Предприятия, выбрать базу, которая заблокирована, и в меню справа выбрать пункт «Изменить», в открывшемся окне нажимаем «Далее» и в «Дополнительных параметрах запуска» удаляем внесенную команду ENTERPRISE /F»< D:\users\Logunova\Documents\BP_3.0.58.41>» /CРазрешитьРаботуПользователей /UCРезервноеКопирование, затем заново открываем базу в обычном режиме.

2) Изменение даты (времени) на компьютере на момент до блокировки. Метод позволяет зайти в базу и снять блокировку, после чего дата (время) меняются обратно.

Для того чтобы изменить дату и время на компьютере, необходимо одним кликом левой кнопкой мыши открыть настройки даты и времени, которые располагаются внизу справа на «Рабочем столе», затем нажимаем на «Изменение настроек даты и времени…», в открывшемся окне выбираем кнопку «Изменить дату и время» — выставляем время и дату до блокировки: Например, дата и время блокировки 26.09.2019 14:50:45, чтобы снять блокировку, меняем дату на 25.09.2018, а время 13:53:17, после изменений заходим в базу и восстанавливаем изначальные параметры даты и времени.

3) Удаление файла блокировки 1Cv8.cdn из каталога с информационной базой.

Для удаления файла блокировки 1Сv8.cdn необходимо запустить 1С:Предприятие, в списке информационных баз выделяем нужную, нажимаем кнопку «Изменить».

Из поля «Каталог информационной базы» копируем путь до базы данных и нажимаем «Отмена».

Вставляем скопированный путь до каталога с информационной базой в проводнике Windows.

В открывшемся каталоге находим и удаляем файл 1Cv8.cdn, после в обычном режиме запускаем 1С.

4) Модификация файла 1Cv8.cdn в каталоге базы.

Открываем 1Cv8.cdn с помощью текстового редактора (блокнота).

Первый параметр «1» является признаком блокировки. Если его поменять на «0» и сохранить файл, то база должна запуститься в обычном режиме.

Поле «Кода для разблокировки» указывается в кавычках после «/UC<код разрешения>». Если код разрешения ранее не был задан, то его можно указать в данном поле и сохранить файл (например «0000»). Далее этот код указываем в строке параметра запуска программы и запускаем как в варианте 1 разблокировки данной статьи.

Логунова Яна,

Консультант Компании «АНТ-ХИЛЛ»

Как восстановить удаленный объект в 1С

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *