Содержание · 7 разделов

Ошибка блокировки данных 1С — это конфликт одновременного доступа к записям базы данных, при котором две транзакции пытаются изменить или прочитать один и тот же объект, и одна из них отменяется системой. Вы видите её как сообщение «Конфликт блокировок при выполнении транзакции» при проведении документа или формировании отчёта. Причина: либо неудачное перекрытие блокировок нескольких пользователей, либо циклическая блокировка (deadlock), когда каждый из двух процессов ждёт ресурс, занятый другим. В обоих случаях 1С сразу прерывает операцию, чтобы не допустить бесконечного ожидания. По нашим данным, в среднем до 5–7% ошибок при массовом вводе документов связаны именно с блокировками. Решение лежит в трёх плоскостях: настройка таймаутов, реорганизация последовательности проведения и перевод части операций на управляемые блокировки.

С подобной ситуацией сталкиваются как бухгалтеры при высокой загрузке в отчётный период, так и системные администраторы, отвечающие за стабильность информационной базы. Ошибка блокировки данных не всегда говорит о дефекте конфигурации — чаще это следствие нормальной работы механизмов параллельного доступа. Разберём, какие виды блокировок существуют в платформе «1С:Предприятие 8», как увидеть реальную картину конфликтов через технологический журнал и что делать, когда ошибка уже возникла.

Вы узнаете, чем отличаются управляемые блокировки от автоматических, как подобрать оптимальные таймауты для конкретной конфигурации и как выстроить регламент проведения документов, чтобы минимизировать взаимоблокировки. Статья написана для версий 1С, использующих серверную архитектуру (MS SQL Server или PostgreSQL), и применима как для типовых, так и для доработанных конфигураций.

Почему возникает ошибка блокировки данных в 1С

Любое изменение данных в 1С (проведение документа, запись элемента справочника) выполняется внутри транзакции, которая накладывает блокировки на изменяемые строки таблиц. Если параллельно другой сеанс пытается изменить или даже прочитать те же строки, возникает конфликт. В зависимости от режима блокировок (управляемый или автоматический) конфликт приводит либо к ожиданию, либо к мгновенному отказу с сообщением об ошибке.

Типичные сценарии, вызывающие ошибку:

  • Два пользователя одновременно проводят накладные по одному контрагенту и одной номенклатуре.
  • Формирование регламентированного отчёта по оборотам за период, в течение которого другой сотрудник активно меняет данные.
  • Массовое перепроведение документов, инициированное администратором, в часы работы бухгалтерии.
  • Выполнение фонового задания (например, расчёт себестоимости) на фоне интенсивного текущего ввода.

Особый случай — deadlock, или взаимоблокировка. Это циклическая блокировка, при которой процесс A ждёт ресурс, занятый процессом B, а B в свою очередь ждёт ресурс, занятый A. СУБД (MS SQL Server или PostgreSQL) обнаруживает такой цикл и принудительно откатывает одну из транзакций. В этот момент 1С выдаёт «ошибка блокировки данных 1С» с пометкой «deadlock» в журнале. Платформа не может самостоятельно разрешить взаимную блокировку, поэтому операция пользователя немедленно прерывается.

Управляемые блокировки и автоматические: две стороны конфликта

В платформе «1С:Предприятие 8» предусмотрено два механизма блокировок: управляемые (объектные) и автоматические (на уровне СУБД). Выбор режима напрямую влияет на частоту и характер ошибок.

Управляемые блокировки реализуются средствами платформы. При проведении документа 1С автоматически устанавливает блокировки на регистры, по которым есть движения. Разработчик может добавить явные блокировки через методы УправляемыеБлокировки.Заблокировать(). В режиме управляемых блокировок транзакция может ожидать освобождения нужного объекта в течение заданного таймаута, а не прерываться сразу. Это снижает количество внезапных ошибок для конечного пользователя, но при большом количестве одновременных обращений способно создавать длинные очереди.

Автоматические блокировки возлагаются на СУБД. Сервер базы данных самостоятельно устанавливает строковые блокировки в момент чтения или изменения данных. При конфликте транзакция немедленно откатывается — ожидания нет. Режим позволяет быстрее обрабатывать низкоконфликтные операции, но при массовом параллельном вводе вы увидите частые сообщения об ошибке блокировки.

Сравнительная таблица:

ХарактеристикаУправляемые блокировкиАвтоматические блокировки
МеханизмОбъектные блокировки средствами платформы 1ССтроковые блокировки СУБД (SELECT ... FOR UPDATE и аналоги)
Время удержанияДо завершения транзакции или явного освобожденияДо завершения транзакции
Поведение при конфликтеОжидание в течение таймаута, затем ошибкаНемедленный откат транзакции
Где применяетсяТиповые конфигурации по умолчанию (1С:Бухгалтерия, 1С:ЗУП)Может быть включён в настройках конфигурации или через внешние обработки

Какой режим выбрать? Если в компании активно работают более 15–20 пользователей с частыми одновременными изменениями одних и тех же данных, управляемые блокировки дают меньше видимых ошибок. При редких, но тяжёлых длинных операциях (закрытие месяца) автоматические иногда оказываются быстрее. В любом случае, оба механизма можно гибко настраивать через таймауты и выбор режимов для отдельных регистров.

Практика

На проектах со сложными доработками мы часто переводим наиболее конфликтные регистры в режим автоматических блокировок с небольшим таймаутом ожидания — это позволяет избежать длительных очередей при проведении массовых операций.

Как определить причину ошибки по журналу регистрации и ТЖ

Встроенный в 1С журнал регистрации фиксирует события уровня «Ошибка» с указанием времени, пользователя и сеанса. Но он не показывает, с каким объектом связан конфликт. Для детального анализа нужно обратиться к технологическому журналу (ТЖ).

Включение и анализ технологического журнала:

  1. Включите ТЖ в конфигураторе или через настройку сервера: для файловых баз — через параметры запуска 1С; для клиент-серверных — с помощью утилиты rac или напрямую в свойствах СУБД.
  2. Установите уровень детализации событий: EXCP (исключения) и LOCK (блокировки).
  3. Воспроизведите ошибку — попросите пользователя повторить операцию, на которой она возникла.
  4. Откройте файл ТЖ и найдите строки с текстом «deadlock» или с сообщением о конфликте блокировок. Для MS SQL в логе СУБД будет указан victim-процесс; для PostgreSQL — сообщение «deadlock detected».
  5. Проанализируйте участвовавшие в конфликте объекты метаданных (таблицы регистров, справочников) и идентификаторы сеансов. Часто достаточно завершить один из мешающих сеансов или дождаться завершения его операции.

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

Настройка таймаутов в 1С и на уровне СУБД

Таймаут ожидания блокировки — основной рычаг управления поведением системы при конфликтах. В 1С параметр задаётся либо в свойствах информационной базы, либо программно. По умолчанию для управляемых блокировок он составляет 20 секунд, для автоматических — 0 (немедленный откат).

Увеличение таймаута до 30–40 секунд даёт больше шансов завершить конфликтную операцию без ошибки, но пользователь может заметить задержку. Для автоматических блокировок на уровне СУБД действуют свои параметры: MS SQL — LOCK_TIMEOUT (в миллисекундах), PostgreSQL — lock_timeout. Рекомендуемое начальное значение для автоматического режима — 10 000 мс (10 секунд). Слишком большой таймаут приводит к очередям и каскадным блокировкам.

Рекомендуемые таймауты:

Режим блокировкиПараметрРекомендуемое начальное значениеГде настраивается
Управляемые блокировкиТаймаутБлокировки (сек)30–40 секСвойства ИБ, параметр сеанса
Автоматические (MS SQL)SET LOCK_TIMEOUT (мс)10 000 (10 сек)Свойства подключения СУБД или через sql-команду
Автоматические (PostgreSQL)lock_timeout (мс)10 000 (10 сек)postgresql.conf или ALTER ROLE

Кроме таймаутов, можно реализовать повторные попытки проведения. В типовых конфигурациях такого механизма нет, но программист способен написать обработку, которая с задержкой в несколько секунд повторяет проведение документа после ошибки блокировки. Перед изменением любых настроек обязательно создайте резервную копию и протестируйте на изолированном контуре.

Внимание

Чего избегать

Не ставьте таймаут ожидания блокировки больше 60 секунд — пользователи будут жаловаться на зависание системы, а фоновые задания могут накапливаться в очереди, снижая общую производительность.

Как избежать deadlock-а при массовом проведении документов

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

Практические рекомендации:

  • Сортируйте документы перед массовой обработкой: сначала по дате, затем по ключевым разрезам (организация, склад). Обработка в едином алфавитном порядке сводит к минимуму вероятность циклических блокировок.
  • Используйте фоновые задания для тяжёлых операций в нерабочее время. Например, закрытие месяца или расчёт себестоимости запускайте ночью, когда пользователи не вносят изменения.
  • Обучите пользователей избегать одновременной правки одних и тех же объектов. Если два бухгалтера работают с общим складом, разнесите их зоны ответственности по номенклатурным группам или времени.
  • Уменьшите гранулярность блокировок: для управляемых блокировок настройте разделение итогов в регистрах. Включается в свойствах регистра накопления — «Разрешить разделение итогов». Вместо захвата всего регистра блокировка будет накладываться только на используемые в документе разрезы.
  • Для разовых массовых перепроведений используйте монопольный режим: временно прекратите работу пользователей, выполните операцию, затем верните доступ.

Эти меры, как правило, снижают частоту deadlock-ов на порядок.

Пошаговый план устранения ошибки блокировки данных 1С

Когда ошибка уже возникла, действуйте по следующему алгоритму.

  1. Определение масштаба. Проверьте, возникает ли ошибка у одного пользователя или у многих, только в определённых документах или повсеместно.
  2. Сбор контекста. Откройте журнал регистрации, включите технологический журнал на уровне исключений. Зафиксируйте точное время ошибки и идентификаторы сеансов.
  3. Устранение текущей блокировки. Найдите сеанс-блокиратор через консоль администрирования 1С или консоль СУБД. Если запрос завис и не завершается, принудительно завершите сеанс.
  4. Повторное проведение. Попросите пользователя повторить операцию — в большинстве случаев она выполняется без ошибки.
  5. Выбор постоянного решения. В зависимости от типа конфликта:

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

  1. Мониторинг. В течение 2–3 дней после внесения изменений отслеживайте жалобы пользователей и записи в технологическом журнале. Если ошибки исчезли, настройка подобрана верно.
Запомнить

Перед началом

Всегда делайте резервную копию базы перед изменением таймаутов или переключением режима блокировок. Если что-то пойдёт не так, вы сможете откатиться к стабильной конфигурации.

Профилактика: регламентные задания и мониторинг

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

  • Регламентное задание «Удаление помеченных объектов» — большое количество неактивных ссылок замедляет транзакции.
  • Фоновое задание анализа длительных запросов. В 1С:ERP и 1С:Комплексная автоматизация есть штатные отчёты «Анализ блокировок» — пользуйтесь ими еженедельно.
  • Архивирование данных за прошлые периоды снижает объём таблиц и время удержания блокировок.
  • Обновляйте статистику СУБД: для MS SQL Server — UPDATE STATISTICS после массовых изменений; для PostgreSQL — регулярный ANALYZE.
  • Проводите нагрузочное тестирование перед запуском в продуктив новых обработок массового проведения.

Соблюдение этих правил продлевает стабильность работы системы и избавляет от внезапных прерываний в разгар отчётного периода. Если самостоятельная настройка не дала результата, специалисты нашей компании помогут диагностировать и устранить ошибки блокировок в вашей конфигурации. За семь лет работы мы локализовали сотни подобных проблем в проектах любого масштаба.

Материал носит справочный характер и не является налоговой или юридической консультацией; для применения к Вашей ситуации согласуйте действия с бухгалтером или юристом.