Ситуация, когда из информационной базы исчезают документы за значительный период времени (например, за две недели), является критической для любого бизнеса. Особенно остро проблема стоит в среде 1С:Предприятие 7.7, где механизмы защиты данных и логирования менее совершенны, чем в современных версиях. Рассмотрим ситуацию, когда резервные копии отсутствуют, бумажных носителей нет, а остатки товаров ушли в "минус" из-за удаления приходных накладных. Выясним, как можно вернуть данные и восстановить работоспособность системы.
Для начала разберем техническую сторону вопроса. В файловой версии 1С 7.7 все данные хранятся в формате DBF. Когда пользователь или внешняя обработка удаляет документ «окончательно» (не просто помечает на удаление, а именно удаляет через процедуру Удалить(1)), физического стирания данных с диска в ту же секунду не происходит.
Проанализируем структуру DBF-файла. Каждая запись в нем начинается со специального служебного байта. Если запись активна, там стоит «пробел» (код 0x20), если запись помечена на удаление (физически в файле), там ставится «звездочка» (код 0x2A). Данные остаются в таблице до тех пор, пока не будет выполнена упаковка таблиц (Pack) или полная переиндексация в монопольном режиме. Это дает нам шанс на спасение данных.
Прежде чем приступать к восстановлению, нам необходимо понять, в каких именно файлах на диске хранятся пропавшие документы. Рассмотрим структуру каталога базы данных. Нам понадобится файл 1CV7.DD — это текстовое описание структуры таблиц. Разберем по шагам, как найти нужную таблицу:
1CV7.DD любым текстовым редактором (например, Блокнотом).ПриходнаяНакладная).Name=DHNNN (где NNN — номер таблицы заголовков) и Name=DTNNN (таблица строк документа).1CJOURN — это общий журнал документов. Если записи удалены из нее, документы не будут видны в интерфейсе 1С, даже если они есть в своих «родных» таблицах DH и DT.После того как мы определили имена файлов (например, DH123.DBF, DT123.DBF и 1CJOURN.DBF), мы можем попытаться снять флаг удаления. Посмотрим на возможные инструменты:
XBase и программно меняют статус записей.Важно: Любые манипуляции проводим строго на копии базы! Выясним последовательность действий: сначала восстанавливаем записи в таблицах документов (DH* и DT*), затем обязательно восстанавливаем соответствующие записи в 1CJOURN.DBF, иначе система не «увидит» эти документы в журналах.
Часто после удаления документов или их некорректного восстановления при попытке проведения новых операций возникает ошибка: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата). Проанализируем причину ее возникновения.
Эта ошибка в 1С 7.7 обычно связана с тем, что переменная, отвечающая за остаток товара (например, НайденныйОстаток), получает значение Null или Empty вместо числа. Рассмотрим фрагмент кода, где это происходит:
Если (Знак*НайденныйОстаток) > 0 Тогда
// Логика списания
КонецЕсли;
Проблема в том, что при удалении документов регистрации (регистраторов) итоги в таблицах регистров могут оказаться «битыми». Выясним, как это исправить:
Пересчет итогов — это ключевое действие. Система заново пройдет по всем существующим в базе документам и пересоберет таблицы остатков (регистров). После этого переменная НайденныйОстаток снова станет числовой (0 или значение остатка), и ошибка сравнения исчезнет.
Если документы все же были физически затерты (упакованы), проверим файл 1CSYSLOG\1CV7.MLG. Это текстовый журнал регистрации. Хотя он не содержит всех данных табличной части, в нем фиксируются события удаления. Разберем, чем это может помочь:
В журнале можно найти дату, время, имя пользователя и текстовое представление документа (например, номер и дату накладной). Это позволит хотя бы составить список того, что нужно восстановить вручную или запросить у контрагентов (акты сверки, дубликаты накладных).
Если объем данных велик, а восстановление из DBF не дало 100% результата, рассмотрим вариант «нового старта». В условиях конца года и планируемого перехода на 1С:Управление торговлей 8 (v8.3), наиболее рациональным может быть следующий план:
Инвентаризация или Оприходование излишков на текущую дату.Для упрощения процесса выгрузки из 7.7, если типовые правила не работают или «урезаны», можно использовать универсальные обработки выгрузки данных в формат XML или DBF, которые не зависят от конфигурации. Выясним, что восстановление данных в старой системе — это лишь временная мера, чтобы «дожить» до конца отчетного периода.
Резюме: Главный урок данной ситуации — внедрение системы автоматического ежедневного резервного копирования. Для 1С 7.7 достаточно простого скрипта, который копирует папку с базой (или только файлы *.dbf и *.md) в облако или на внешний носитель. Помните: программисты делятся на тех, кто еще не делает бэкапы, и тех, кто уже делает.