Почему в 1С 7.7 не отображаются строки в документах при наличии проводок и как это исправить?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе в «1С:Бухгалтерский учет 7.7» пользователи иногда сталкиваются с аномальной ситуацией: при открытии документа (например, Перемещение материалов) за прошлые периоды его табличная часть оказывается визуально абсолютно пустой. При этом бухгалтерские проводки на месте, движения формируются корректно, и все данные попадают в стандартные отчеты (оборотно-сальдовую ведомость, карточку счета). Документы текущего года при этом могут открываться без нареканий.

Разберем архитектурные причины такого поведения файловой базы 1С 7.7 и рассмотрим пошаговый алгоритм диагностики и восстановления данных.

Архитектура хранения данных документов в 1С 7.7

В файловой версии платформы 1С 7.7 информация одного документа разделена по нескольким физическим таблицам формата DBF:

  1. 1SJOURN.DBF — общий журнал документов. Содержит дату, номер, признак проведения и уникальный идентификатор документа (IDDOC).
  2. DH<номер>.DBF — таблица шапки документа конкретного вида. Хранит реквизиты шапки.
  3. DT<номер>.DBF — таблица табличной части документа. Содержит строки документа, связанные с шапкой по полю IDDOC и номеру строки LINENO_.
  4. 1SOPER.DBF и 1SENTRY.DBF — таблицы бухгалтерских операций и проводок с аналитикой по субконто.

Если в отчетах данные отображаются, значит, таблицы 1SOPER и 1SENTRY в полном порядке. Проблема заключается либо в нарушении целостности файла табличной части DT*.DBF, либо в индексах, либо в сетевом доступе к файлам.

Шаг 1. Переиндексация и удаление индексных файлов

Первое и самое простое действие при нарушении связей между таблицами — перестроение индексов.

  1. Обязательно создадим резервную копию базы данных (скопируем всю папку с информационной базой в надежное место).
  2. Завершим работу всех пользователей в базе.
  3. В каталоге информационной базы удалим все файлы с расширением .CDX (это индексные файлы). Сами таблицы .DBF и файл конфигурации 1Cv7.MD трогать нельзя.
  4. Запустим программу 1С 7.7 в монопольном режиме. Программа автоматически выполнит переиндексацию всех таблиц.

Шаг 2. Программная проверка наличия строк в документе

Чтобы убедиться, считывает ли платформа строки документа из базы или они действительно отсутствуют в выборке, выполним программную проверку в модуле формы документа:


Процедура ПриОткрытии()
    Для Сч = 1 По КоличествоСтрок() Цикл
        ПолучитьСтрокуПоНомеру(Сч);
        Сообщить("Строка " + Сч + ": " + Материал.Наименование + " - " + Количество);
    КонецЦикла;
КонецПроцедуры

Если при открытии документа окно сообщений остается пустым или КоличествоСтрок() возвращает 0, значит, платформа не видит записи в таблице DT*.DBF для данного значения IDDOC.

Шаг 3. Диагностика таблицы DT*.DBF сторонним редактором

Выясним, физически ли присутствуют строки в таблице или они повреждены:

  1. Откроем файл словаря базы данных 1Cv7.DD в текстовом редакторе и найдем описание нужного документа (например, Document ПеремещениеМатериалов). Определим имя соответствующего файла табличной части (например, DT1234.DBF).
  2. Откроем найденный файл DT*.DBF в любом специализированном DBF-редакторе.
  3. Проверим наличие записей с IDDOC проблемных документов.
  4. Проверим признак удаления записей: в формате DBF первый байт каждой записи отвечает за пометку на удаление. Если записи помечены байтом 0x2A (звездочка), платформа их не читает. Снятие признака удаления вернет строки в документы.
  5. Проверим заголовок файла: если количество записей в заголовке меньше фактического объема файла (сбой счетчика записей), скорректируем заголовок в DBF-редакторе. После любых ручных правок DBF необходимо повторно удалить все файлы .CDX и запустить базу монопольно.

Шаг 4. Проверка влияния сетевого кэширования (SMB2 / SMB3)

Если информационная база расположена на сетевом ресурсе, причиной сбоя может быть некорректная работа сетевого кэширования в современных версиях Windows:

  1. Скопируем базу целиком на локальный диск и откроем локально. Если локально документы открываются со всеми строками, проблема заключается исключительно в сетевом транспорте.
  2. При открытии файлов по сети платформа 1С 7.7 в случае временной блокировки или ошибки чтения файла Windows может создать пустой временный файл с аналогичным именем в папке временных файлов и работать с ним.
  3. Для решения сетевых проблем на сервере/компьютере, где открыт общий доступ к базе, отключим параметры блокировок и кэширования каталогов (DirectoryCacheLifetime, FileInfoCacheLifetime, FileNotFoundCacheLifetime установим в значение 0 в реестре) либо переведем пользователей на работу через Remote Desktop (RDP).

Шаг 5. Восстановление строк табличной части из бухгалтерских проводок

Если файл DT*.DBF был необратимо поврежден или очищен утилитами восстановления, но все проводки сохранены в 1SENTRY.DBF, данные можно восстановить программно с помощью внешней обработки (.ert):


// Пример восстановления табличной части из операции документа
Док = СоздатьОбъект("Документ.ПеремещениеМатериалов");
Опер = СоздатьОбъект("Операция");

Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
    Если Док.КоличествоСтрок() = 0 Тогда
        Если Опер.НайтиОперацию(Док.ТекущийДокумент()) = 1 Тогда
            Опер.ВыбратьПроводки();
            Пока Опер.ПолучитьПроводку() = 1 Цикл
                Док.НоваяСтрока();
                Док.Материал = Опер.Субконто(1);
                Док.Количество = Опер.Количество;
                Док.Сумма = Опер.Сумма;
            КонецЦикла;
            // Записываем документ без перепроведения, чтобы не менять итоги
            Док.Записать();
            Сообщить("Восстановлен документ: " + Док.ТекущийДокумент());
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Использование метода Записать() вместо Провести() позволяет заполнить табличную часть документа номенклатурой и суммами, не затрагивая уже существующие бухгалтерские регистры и проводки.

← На главную