Ситуация, когда основной файл файловой базы данных 1Cv8.1CD внезапно становится размером 0 байт, обычно свидетельствует о вредоносной активности (скрипты-вайперы или сбойные шифровальщики-вымогатели). Злоумышленники открывают файл на запись, обнуляют его длину и сохраняют пустую заглушку. Стандартные утилиты восстановления удаленных файлов в таком случае часто оказываются бессильны, так как физического удаления объекта в файловой системе не происходило.
Разберем по шагам, какие способы позволяют спасти информацию, если последняя резервная копия устарела, но в сети сохранились теневые копии или работающие периферийные узлы распределенной информационной базы (РИБ).
Перед тем как переходить к сложным манипуляциям с базами, проанализируем локальные накопители на наличие автоматически созданных снимков состояния тома (Volume Shadow Copy):
ShadowExplorer) или откроем свойства папки с базой в проводнике Windows на вкладке Предыдущие версии. Если служба теневого копирования была активна, можно выгрузить состояние файла 1Cv8.1CD на момент последней точки восстановления.%TEMP%, каталоги кэша платформы 1С). В процессе интенсивной работы пользователей там могут сохраняться временные файлы таблиц, из которых в критических ситуациях можно извлечь часть информации.Если файл базы полностью утерян, а последняя резервная копия была сделана неделю назад, наличие периферийных узлов (РИБ) позволяет полностью или частично восстановить актуальные данные за утерянный период. Рассмотрим два основных сценария работы с распределенной базой.
Если в распределенной базе использовался полный план обмена (все документы и справочники без фильтрации по организациям передавались во все узлы), периферийная база содержит 100% актуальной информации. В таком случае быстрее всего «отвязать» периферийный узел от главного и сделать его новой центральной базой.
Разберем, как снять признак подчиненного узла:
1cv8.exe /ResetMasterNode
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После выполнения этой команды база станет независимым главным узлом. Далее от нее можно заново создать и настроить подчиненные узлы для остальных филиалов.
Если в РИБ настроен выборочный обмен (с фильтрами по складам, организациям или подразделениям), периферийная база не содержит всех данных системы. В этом случае восстановим недельную копию центральной базы и принудительно выгрузим в нее все изменения, накопленные в периферийных базах за прошедшую неделю.
Поскольку автоматический обмен не передает старые данные, так как считает их уже отправленными, зарегистрируем изменения вручную.
1. Регистрация изменений без перепроведения документов:
Не требуется перепроводить документы вручную или групповой обработкой — это может нарушить последовательность партий или запрет редактирования закрытых периодов. Достаточно зарегистрировать объекты к обмену с помощью встроенного механизма:
УзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("ЦБ"); // Указываем код центрального узла
Если ЗначениеЗаполнено(УзелОбмена) Тогда
// Регистрируем все документы определенного типа за нужный период
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачалоДня(ТекущаяДата() - 7 * 86400));
Пока Выборка.Следующий() Цикл
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
Для типовых конфигураций (например, 1С:Управление торговлей 10.3, 1С:Бухгалтерия) удобнее воспользоваться штатной обработкой Регистрация изменений для обмена, где можно выделить нужные типы метаданных или документы за выбранный период и нажать кнопку регистрации.
2. Исправление ошибки номеров сообщений обмена:
При попытке загрузить файл обмена в старую копию базы 1С выдаст ошибку: «Номер сообщения меньше или равен ранее принятому». Это происходит потому, что в восстановленной резервной копии счетчики пакетов откатились назад.
Чтобы восстановить синхронизацию, скорректируем номера сообщений в узле обмена через обработку или окно настройки обмена данными:
УзелОбъект = УзелОбмена.ПолучитьОбъект();
// Сбрасываем или выставляем номер в соответствии с отправляемым пакетом
УзелОбъект.НомерПринятого = 0;
УзелОбъект.НомерОтправленного = 0;
УзелОбъект.Записать();
После обнуления счетчиков в центральном узле обмен успешно примет файл выгрузки из периферийной базы и актуализирует все измененные справочники и документы.
Если периферийных баз не было, а часть документов все же утеряна, проверим целостность журнала регистрации (файлы 1Cv8.lgd или каталог 1Cv8.lgf). Если журнал уцелел, откроем его через Конфигуратор -> Администрирование -> Журнал регистрации и отфильтруем события создания и проведения документов за последнюю неделю. Это позволит оперативно восстановить состав документов, суммы, контрагентов и номенклатуру без необходимости вспоминать первичную документацию вручную.