При работе в файловой версии 1С:Предприятие 7.7 (DBF) пользователи часто сталкиваются с неприятной ситуацией: данные в журнале расчетов неожиданно теряются, из-за чего расчетные листки, своды и ведомости формируются некорректно или выходят пустыми. Спустя некоторое время или после перезапуска программы записи могут снова появляться. Проанализируем физические причины этого явления и разберем по шагам, как навсегда устранить проблему.
Самая распространенная причина «пропадания» записей — повреждение индексных файлов. В файловой базе 1С 7.7 таблицы данных хранятся в файлах с расширением .dbf, а их индексы — в файлах .cdx. Когда пользователи работают через терминальный сервер и закрывают зависшую программу принудительно (через Диспетчер задач), файловый движок не успевает корректно закрыть файлы базы данных. В результате индекс разрушается, и система «перестает видеть» часть записей, хотя физически в .dbf они остаются.
Рассмотрим, как правильно выполнить восстановление индексов:
*.cdx.Выясним, как именно работает платформа 1С 7.7 при расчете зарплаты. Записи журнала расчетов хранятся в файлах с префиксом CJ*.dbf (например, CJ123.dbf).
Когда бухгалтер запускает перерасчет по отдельному сотруднику или всей организации (с помощью обработки РасчетЗарплата или прямо из журнала расчетов), платформа работает по следующему алгоритму:
.cdx.Важный момент: если один бухгалтер выполнял перерасчет, а второй в этот же момент формировал расчетный листок или ведомость, отчет может прочитать таблицу в момент, когда старые записи уже помечены на удаление, а новые еще не сформированы. В итоге отчет покажет пустой результат. Чтобы избежать этой ситуации, необходимо разграничить во времени массовые расчеты и формирование отчетности.
В файловой версии 1С 7.7 существуют строгие ограничения на размер файлов. Если база приближается к размеру 2 Гигабайта, могут возникать аномальные сбои в работе механизмов расчета и индексации.
Разберем комплекс мер по обслуживанию базы данных:
Файл журнала регистрации расположен по пути SYSLOG\1cv7.mlg. При достижении размера в несколько сотен мегабайт он вызывает сильные задержки при записи и принудительных блокировках файлов. Рекомендуется архивировать и очищать этот файл.
Обычная реиндексация не удаляет физически помеченные на удаление строки из файлов CJ*.dbf. При частых перерасчетах файл журнала расчетов разрастается «мусорными» записями. Чтобы полностью сжать таблицы, проделаем операцию выгрузки и загрузки:
Проверим размеры файлов с расширением .dbf в каталоге базы. Ни один из файлов не должен превышать 1–1.5 ГБ (в особенности 1CV77.DBF, 1CRG*.DBF и CJ*.DBF).
Проанализируем ситуацию, когда сеансы пользователей регулярно зависают при выходе из программы. Это прямое следствие неоптимальной работы сетевого кэширования (Opportunistic Locking / OpLocks) на сервере.
При активном кэшировании SMB2/SMB3 операционная система задерживает запись измененных байтов файлов .cdx на диск, из-за чего терминальные сессии начинают конфликтовать за доступ к одним и тем же диапазонам байт. При закрытии программы 1cv7s.exe подвисает, ожидая освобождения файловых хэндлов.
Для решения сетевых зависаний системному администратору рекомендуется: