При работе в «1С:Бухгалтерский учет 7.7» пользователи иногда сталкиваются с аномальной ситуацией: при открытии документа (например, Перемещение материалов) за прошлые периоды его табличная часть оказывается визуально абсолютно пустой. При этом бухгалтерские проводки на месте, движения формируются корректно, и все данные попадают в стандартные отчеты (оборотно-сальдовую ведомость, карточку счета). Документы текущего года при этом могут открываться без нареканий.
Разберем архитектурные причины такого поведения файловой базы 1С 7.7 и рассмотрим пошаговый алгоритм диагностики и восстановления данных.
В файловой версии платформы 1С 7.7 информация одного документа разделена по нескольким физическим таблицам формата DBF:
IDDOC).IDDOC и номеру строки LINENO_.Если в отчетах данные отображаются, значит, таблицы 1SOPER и 1SENTRY в полном порядке. Проблема заключается либо в нарушении целостности файла табличной части DT*.DBF, либо в индексах, либо в сетевом доступе к файлам.
Первое и самое простое действие при нарушении связей между таблицами — перестроение индексов.
.CDX (это индексные файлы). Сами таблицы .DBF и файл конфигурации 1Cv7.MD трогать нельзя.Чтобы убедиться, считывает ли платформа строки документа из базы или они действительно отсутствуют в выборке, выполним программную проверку в модуле формы документа:
Процедура ПриОткрытии()
Для Сч = 1 По КоличествоСтрок() Цикл
ПолучитьСтрокуПоНомеру(Сч);
Сообщить("Строка " + Сч + ": " + Материал.Наименование + " - " + Количество);
КонецЦикла;
КонецПроцедуры
Если при открытии документа окно сообщений остается пустым или КоличествоСтрок() возвращает 0, значит, платформа не видит записи в таблице DT*.DBF для данного значения IDDOC.
Выясним, физически ли присутствуют строки в таблице или они повреждены:
1Cv7.DD в текстовом редакторе и найдем описание нужного документа (например, Document ПеремещениеМатериалов). Определим имя соответствующего файла табличной части (например, DT1234.DBF).DT*.DBF в любом специализированном DBF-редакторе.IDDOC проблемных документов.0x2A (звездочка), платформа их не читает. Снятие признака удаления вернет строки в документы..CDX и запустить базу монопольно.Если информационная база расположена на сетевом ресурсе, причиной сбоя может быть некорректная работа сетевого кэширования в современных версиях Windows:
DirectoryCacheLifetime, FileInfoCacheLifetime, FileNotFoundCacheLifetime установим в значение 0 в реестре) либо переведем пользователей на работу через Remote Desktop (RDP).Если файл DT*.DBF был необратимо поврежден или очищен утилитами восстановления, но все проводки сохранены в 1SENTRY.DBF, данные можно восстановить программно с помощью внешней обработки (.ert):
// Пример восстановления табличной части из операции документа
Док = СоздатьОбъект("Документ.ПеремещениеМатериалов");
Опер = СоздатьОбъект("Операция");
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.КоличествоСтрок() = 0 Тогда
Если Опер.НайтиОперацию(Док.ТекущийДокумент()) = 1 Тогда
Опер.ВыбратьПроводки();
Пока Опер.ПолучитьПроводку() = 1 Цикл
Док.НоваяСтрока();
Док.Материал = Опер.Субконто(1);
Док.Количество = Опер.Количество;
Док.Сумма = Опер.Сумма;
КонецЦикла;
// Записываем документ без перепроведения, чтобы не менять итоги
Док.Записать();
Сообщить("Восстановлен документ: " + Док.ТекущийДокумент());
КонецЕсли;
КонецЕсли;
КонецЦикла;
Использование метода Записать() вместо Провести() позволяет заполнить табличную часть документа номенклатурой и суммами, не затрагивая уже существующие бухгалтерские регистры и проводки.