В ранее записанных и проведённых документах пропали неторые реквизиты. В результате в отчётах полный бардак. Как я решил эту проблему.
Предисловие
Прихожу к клиенту, мне показывают отчет "Ведомость по контрагентам", сверху цифры, не принадлежащие никому из контрагентов. Захожу туда, смотрю проводки, открываю документ и вижу в реквизите "Контрагент" . Как такое могло получиться не знаю, т.к. стандартными методами удаления этого не сделаешь, а клиент явно не мог сделать это программным методом (он не только не владеет программированием, понятия не имеет, зачем нужен Конфигуратор). Есть, конечно, Журнал Регистрации, но я там ничего не нашел.
Решение проблемы
Мой первый вывод, что всё-таки, кто-то из программеров постарался, а говорить об этом клиент не хочет.
Итак, к делу. Я использовал MS Visual FoxPro 8.0.
Для начала открываем файл 1Cv7.DD. Нормально открывается с помощью Excel. Ни в коем случае не сохраняем при закрытии!
Там нахожу имя нужного мне *.DBF (в поиске пишем идентификатор), и отрываю его с помощью MS Visual FoxPro. Здесь Вы можете с *.DBF файлом делать всё, что угодно, даже если совершенно не знаете FoxPro. Он здесь редактируется почти как в Excel.
НО: Не изменяйте структуру данных, иначе не сможете вернуть в 1С обработанный файл.
В открывщейся таблице находим нужные объекты (если точно знаем, что нам нужно), иначе "гуляем" по крайнему левому полю и снимаем там "черноту" (эта чернота есть признак того, что строка ситемой 1С удалена). Такой объект вообще не отбражается в БД. Крайнее левое поле - ключ удаления. Если он включен (черный) то 1С это поле не видит, и не важно, как это случилось.
Далее делаем просто:
1.Если знаем, что нам нужно восстановить, ищем нужные объекты, снимаем флаг удаления. Объекты становятся "видными" для 1С. И не просто видимыми, они восстановятся во всех объектах, где были использваны.
2. Если не знаем (см. выше) снимаем флаг у всех, где найдём. В результате в БД появятся все объекты, бывшие там ДО момента последней упаковки ИБ, и не перекрытые новыми записями. Лишние всегда можно удалить стандартными способами 1С. Потом открываем программу, удаляем то, что восстановили "до кучи".
То же самое относится к подчинённым объектам. Если это сделать сразу, восстановление вполне реально, причём не придётся делать никаких перепроведений.
P.S. Если запись *.dbf или ссылка на неё потеряна это не поможет... Закон 1С: 1С-ка первым делом перезаписывает удалённые записи, только потом начинает создавать новые. Это я к тому, что мой способ эффективен ТОЛЬКО В РЕЖИМЕ СКОРОЙ ПОМОЩИ! Пока там не переписали поля с ошибками.
После выполнения всех операций ОБЯЗАТЕЛЬНО сделать реиндексирование!
P.S.: При выполнении таких операций БД должна быть ВЫКЛЮЧЕНА. Первое включение - через Конфигуратор: "Тестирование и исправление ИБ". Там произойдёт реиндексирование, а при желании (и настройках) и похороны неверных ссылок.Объекты, бывшие до упаковки и вошедшие в упаковку больше нигде и никак не проявятся, если только из архивов вытащить.
Я не зря писал, что при такой "хурургии" лучше заранее знать, кого и чего мы там ищем. Если не знаем - поднимаем всё кладбище, а дальше решаем, кого воскресить, а кого сразу назад отправить... Жуткая философия, требует присутствия клиента (для подтверждения жизнеспособности поднимаемого). Но это помогает... Иногда.
P.S.: Я ни коим образом не рекомендую это в качестве идеального способа лечения подобных ситуаций. Я просто описал способ, как я это решил.