gifts2017

Восстановление потерянных реквизитов документов v 7.7

Опубликовал Владимир Макаров (vladimir_makarov) в раздел Администрирование - Поиск данных

В ранее записанных и проведённых документах пропали неторые реквизиты. В результате в отчётах полный бардак. Как я решил эту проблему.

Предисловие

Прихожу к клиенту, мне показывают отчет "Ведомость по контрагентам", сверху цифры, не принадлежащие никому из контрагентов. Захожу туда, смотрю проводки, открываю документ и вижу в реквизите "Контрагент" <Объект не найден>. Как такое могло получиться не знаю, т.к. стандартными методами удаления этого не сделаешь, а клиент явно не мог сделать это программным методом (для меня это вообще не вопрос, поэтому подобные обработки не публикую). Есть, конечно, Журнал Регистрации, но я там ничего не нашел.

Решение проблемы

Мой первый вывод, что всё-таки кто-то из программеров постарался, а говорить об этом клиент не хочет.

Итак, к делу. Я использовал MS Visual FoxPro 8.0.

Для начала открываем файл 1Cv7.DD. Нормально открывается с помощью Excel. Ни в коем случае не сохраняем при закрытии!

Там нахожу имя нужного мне *.DBF (в поиске пишем идентификатор), и отрываю его с помощью MS Visual FoxPro. Здесь Вы можете с *.DBF файлом делать всё, что угодно, даже если совершенно не знаете FoxPro. Он здесь редактируется почти как в Excel.

НО: Не изменяйте структуру данных, иначе не сможете вернуть в  1С обработанный файл.

В открывщейся таблице находим нужные объекты (если точно знаем, что нам нужно), иначе "гуляем" по крайнему левому полю и снимаем там "черноту" (эта чернота есть признак того, что строка ситемой 1С удалена). Такой объект вообще не отбражается в БД. Крайнее левое поле - ключ удаления. Если он включен (черный) то 1С это поле не видит, и не важно, как это случилось.

Далее делаем просто:

1.Если знаем, что нам нужно восстановить, ищем нужные объекты, снимаем флаг удаления. Объекты становятся "видными" для 1С.

2. Если не знаем (см. выше) снимаем флаг у всех, где найдём. В результате в БД появятся все объекты, бывшие там ДО момента последней упаковки ИБ, и не перекрытые новыми записями. Лишние всегда можно удалить стандартными способами. Потом открываем программу, удаляем то, что восстановили "до кучи".

То же самое относится к подчинённым объектам. Если это сделать сразу, восстановление вполне реально, причём не придётся делать никаких перепроведений.

P.S. Если запись *.dbf или ссылка на неё потеряна это не поможет...

После выполнения всех операций ОБЯЗАТЕЛЬНО сделать реиндексирование!

P.S.: При выполнении таких операций БД должна быть ВЫКЛЮЧЕНА. Первое включение - через Конфигуратор: "Тестирование и исправление ИБ". Там произойдёт реиндексирование, а при желании (и настройках) и похороны неверных ссылок.Объекты, бывшие до упаковки и вошедшие в упаковку больше нигде и никак не проявятся, если только из архивов вытащить.
Я не зря писал, что при такой "хурургии" лучше заранее знать, кого и чего мы там ищем. Если не знаем - поднимаем всё кладбище, а дальше решаем, кого воскресить, а кого сразу назад отправить... Жуткая философия, требует присутствия клиента (для подтверждения жизнеспособности поднимаемого). Но это помогает... Иногда.
P.S.: Я ни коим образом не рекомендую это в качестве лечения подобных ситуаций. Я просто описал способ, как я это решил.
Спасибо за внимание.

Желаю удачи в работе!

С уважением, Владимир.

 

 

 

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Владимир (hogik) 13.09.10 22:07
(0)
"....появятся все объекты, бывшие там до упаковки ИБ."
- Не все. Не появляются объекты перекрытые новыми записями.
Т.к. в 1С помеченные на удаление (в смысле СУБД) записи используются для размещения новых записей.
2. Епрст (Ёпрст) 14.09.10 10:14
(0) Какая наивность, если активно писали - записей ужо не будет.
Ибо в первую очередь, пишутся записи поверх "удаленных".
Такое прокатит, если только после удаления с базой не работал никто.

Да и рекомендовать это не стоит, и уж тем более открывать словарик !эксэлем ! и для дбф-ок фокспро ставить.
3. Александр Зубцов (iov) 15.09.10 15:58
мдя совет дан а вот пользоваться им или нет читайте в каментах.
4. Владимир (hogik) 15.09.10 16:08
(0)
Еще в дополнение к (1) сообщению.
Кроме "восстановления" элемента справочника необходимо восстанавливать значения периодических и строковых (неогр. длина) реквизитов. А значение реквизитов этих типов хранятся в отдельных таблицах и, думаю, будут перекрыты еще быстрей, чем сам элемент справочника. Т.к. эти таблицы используются для хранения значений реквизитов всех видов агрегатных данных.
5. Епрст (Ёпрст) 16.09.10 11:01
+4 и значения строк неограниченной длины, которые хранятся в блоб-е ..
6. Владимир Макаров (vladimir_makarov) 14.10.10 12:24
(4) Знаю. И вообще, не предлагаю этот способ, как кардинальный. Просто в конкретной ситуиции это помогло. Тем более, обратились сразу, ещё ничего не успели "перекрыть". +5
(3) Это не совет, а то, каким ПРОСТЫМ путём я решил конкретную проблему (я так и не выяснил, кто её создал: журнал регистрации был очищен...)
(2) Смотри выше. А лучше подскажи, как такое могло получиться? Советы типа "<Объект>.Удалить()" не котируются, очень сомневаюсь, что User-ы на это способны.
7. Аркадий Кучер (Abadonna) 18.12.10 01:22
Автор, смени ник на "Мистер Очевидность" - очень по теме будет.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа