Как устранить ошибку «Ожидание блокировки таблицы Журналы» в 1С 7.7?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

Проблема «Ожидания блокировки таблицы "Журналы"» в версии 1С:Предприятие 7.7 является одной из самых трудноизлечимых для крупных файловых баз. Ситуация, когда система «замирает», а пользователи не могут совершить ни одного действия, часто сопровождается тем, что визуально никто не выполняет тяжелых операций. В этой статье мы подробно разберем, почему возникает эта ошибка, какие механизмы лежат в ее основе и как восстановить работоспособность системы без постоянного выгона всех пользователей из базы.

Анализируем причину: почему именно таблица «Журналы»?

Для начала проанализируем структуру базы данных 1С 7.7 в файловом режиме (DBF). За таблицу журналов отвечает файл 1SJOURN.DBF. Это один из самых «нагруженных» файлов в системе, так как в него записываются данные при создании или изменении практически любого документа (дата, номер, вид документа, флаги проведения и т.д.). Любая транзакция, связанная с документами, так или иначе блокирует этот файл.

Рассмотрим основные факторы, приводящие к «мертвой» блокировке:

  1. Превышение критического размера файла: Хотя теоретический предел DBF составляет 2 ГБ, для 1С 7.7 серьезные проблемы начинаются уже после 1 ГБ.
  2. Сетевые протоколы и кэширование (SMB2/SMB3): Современные версии Windows Server используют механизмы оптимизации, которые конфликтуют со старым движком 1С.
  3. Зависшие терминальные сессии: При аварийном завершении работы 1С в памяти сервера может остаться процесс, удерживающий дескриптор файла.
  4. Работа антивирусов и служб индексации: Попытка просканировать изменяемый файл 1SJOURN.DBF приводит к конфликту доступа.

Решение 1: Проверка и оптимизация размера базы данных

Выясним, не достигла ли ваша база критических отметок. Если файл 1SJOURN.DBF или файлы регистров (например, RG*.DBF) превышают 1 ГБ, штатные механизмы блокировок Windows начинают работать некорректно. Система не может быстро вычислить смещение байтов для установки блокировки, что вызывает бесконечное ожидание.

Разберем шаги по уменьшению размера:

  1. Свертка базы: Это наиболее правильный путь. Необходимо обрезать старые периоды, перенести остатки и удалить помеченные на удаление объекты.
  2. Упаковка таблиц: В монопольном режиме выполните «Типовые операции» — «Тестирование и исправление ИБ» с выбранным пунктом «Упаковка таблиц». Это удалит физически записи, помеченные внутри DBF как удаленные, и уменьшит размер файла.
  3. Очистка системного журнала: Проверьте файл 1cv7.mlg в папке SYSLOG. Если он огромен, 1С может тратить значительное время на запись в него, удерживая общие блокировки. Просто переименуйте или удалите его.

Решение 2: Настройка сетевой среды и отключение OpLocks

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

Для решения проблемы на стороне сервера необходимо внести изменения в реестр (будьте осторожны, всегда делайте бэкап реестра перед правками):


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
"EnableOplocks"=dword:00000000
"Size"=dword:00000003

Также рекомендуется на клиентских машинах (или на терминальном сервере) отключить кэширование каталогов в протоколе SMB2/3, добавив параметры в ветку:


[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"DirectoryCacheLifetime"=dword:00000000
"FileNotFoundCacheLifetime"=dword:00000000
"FileInfoCacheLifetime"=dword:00000000

Эти настройки заставят систему чаще обращаться к диску и не «залипать» на кэшированных данных, что существенно снижает частоту возникновения ошибки ожидания блокировки.

Решение 3: Управление антивирусным ПО и правами доступа

Выясним, не блокирует ли файлы сама операционная система. Часто антивирус, пытаясь проверить файл в момент его изменения пользователем 1С, накладывает свою блокировку. Пока антивирус не «отпустит» файл, 1С будет выдавать ошибку у всех остальных участников процесса.

Посмотрим, что нужно сделать:

  1. Добавьте всю папку с базой данных в исключения антивируса (проверка при чтении, запись, изменение).
  2. Добавьте процессы 1cv7.exe и 1cv7s.exe в список доверенных программ.
  3. Проверьте права доступа NTFS. У всех пользователей должны быть полные права на чтение, запись и удаление файлов в каталоге базы. Это важно, так как 1С постоянно создает и удаляет временные файлы индексов (*.cdx) и файлы блокировок (*.lck).

Решение 4: Принудительное снятие блокировок без перезагрузки

Если ошибка уже возникла и «никто ничего не делает», но работа стоит, попробуем снять блокировку точечно. Вместо того чтобы выгонять всех, выполним следующие действия на сервере:

  1. Откройте «Управление компьютером» — «Общие папки» — «Открытые файлы».
  2. Найдите в списке файлы вашей базы, особенно те, что начинаются на 1SJOURN или имеют расширение .cdx.
  3. Посмотрите, за каким пользователем числится файл. Если этот пользователь утверждает, что он вышел или ничего не делает, принудительно закройте его дескрипторы через контекстное меню «Закрыть открытый файл».
  4. В диспетчере задач сервера убедитесь, что нет «висящих» процессов 1cv7.exe с нулевой загрузкой процессора, которые остались после некорректного завершения сессии. Завершите их принудительно.

Решение 5: Радикальное — переход на SQL

Как показывает практика обсуждения, если база данных интенсивно используется и ее файлы превышают 1 ГБ, работа в DBF-формате всегда будет сопряжена с риском блокировок. Разберем, как правильно подойти к переходу на SQL, если стандартная выгрузка через .dt (или просто «Загрузить из архива») не помогает или длится бесконечно долго.

Для успешного перехода в условиях огромных данных рекомендуется:

  1. Использование сторонних утилит: Применяйте инструменты прямой заливки DBF в SQL (например, через DTS или сторонние скрипты), минуя конфигуратор 1С.
  2. Настройка SQL-версии 1С: Помните, что штатно 1С 7.7 работает только с SQL Server 2000. Для работы с современными версиями (SQL 2012–2022) необходимо заменить библиотеку bkend.dll или использовать специальные патчи (например, «Secret Net» или сборки от сообщества), которые подменяют запросы к системным таблицам SQL.
  3. Оптимизация запросов: В SQL-версии блокировки работают иначе (на уровне строк, а не всей таблицы), что полностью решает проблему «Ожидания блокировки таблицы Журналы».

Дополнительный совет: использование внешних компонент

Если вы используете компоненты CPP или FORMEX, убедитесь, что они обновлены до последних версий. Некоторые старые версии ВК могли некорректно работать с транзакциями, оставляя их открытыми при возникновении внутренних ошибок кода. Проанализируйте глобальный модуль на предмет длительных циклов в обработчиках ПриЗаписи или ПриПроведении, которые могут «держать» таблицу журналов дольше необходимого.

Подводя итог, можно сказать: ошибка блокировки в 1С 7.7 — это почти всегда комплексная проблема инфраструктуры и размера данных. Начните с настройки реестра (OpLocks) и исключений антивируса, это помогает в 80% случаев без кардинальных изменений в коде.

← На главную