Администрирование · 12 мин
Для чего нужны блокировки в 1С и как с ними работать
Зачем нужны блокировки в 1С, как работают объектные и транзакционные блокировки, почему возникают ошибки и как их устранить.
Когда в базе 1С одновременно работают десятки пользователей, программа обязана гарантировать, что их действия не испортят данные друг друга. Если два менеджера одновременно проводят реализацию по одному товару, система должна списать остаток корректно, а не дважды продать одни и те же единицы. Именно за эту согласованность отвечают блокировки — механизм, который временно «резервирует» данные за конкретной операцией.
Блокировки в 1С — это не ошибка и не сбой, а штатный инструмент целостности данных. Проблемы начинаются там, где блокировки удерживаются слишком долго, захватывают лишние данные или конфликтуют между собой. Тогда пользователи видят сообщения «Конфликт блокировок при выполнении транзакции» или «Ошибка блокировки объекта», а работа базы замедляется.
Материал объясняет, какие виды блокировок существуют, почему возникают конфликты, как диагностировать источник проблемы и что можно сделать самостоятельно, а где потребуется доработка конфигурации или настройка СУБД.
Какую задачу решают блокировки
Основная задача блокировки — обеспечить изоляцию параллельных операций. Пока один пользователь проводит документ, изменяющий остатки на складе, другой пользователь не должен одновременно менять те же остатки на основании устаревших данных. Блокировка фиксирует: «эти записи сейчас заняты, дождитесь завершения операции или отмените действие».
Без блокировок типичные сценарии давали бы искажённые результаты: двойное списание товара, расхождение сумм взаиморасчётов, потерянные изменения при одновременном редактировании одного элемента справочника. Блокировки превращают многопользовательскую работу в упорядоченную очередь там, где порядок критичен.
Важно понимать: блокировка — это не запрет на работу с базой, а точечное ограничение. Остальные пользователи продолжают работать с другими документами и записями, пока конфликтующая операция не завершится.
Какие виды блокировок существуют в 1С
В платформе 1С:Предприятие принято разделять блокировки на объектные и транзакционные. Они работают на разных уровнях и решают разные задачи.
Объектные блокировки
Объектная блокировка возникает, когда пользователь открывает объект на редактирование — например, начинает изменять элемент справочника или документ в форме. Пока объект открыт у одного пользователя, другой при попытке изменить его получит сообщение, что объект заблокирован. Такая блокировка защищает от ситуации, когда двое правят один объект и изменения одного затирают изменения другого.
Транзакционные блокировки
Транзакционные блокировки устанавливаются автоматически при записи данных в рамках транзакции: проведение документа, запись набора регистров, обмен данными. Они существуют только внутри транзакции и снимаются при её завершении. Именно транзакционные блокировки чаще всего становятся причиной ошибок «Конфликт блокировок при выполнении транзакции» и взаимоблокировок (deadlock).
Управляемый и автоматический режим
В конфигурации может использоваться автоматический режим управления блокировками (платформа сама решает, что блокировать) или управляемый, при котором разработчик явно указывает, какие данные и когда блокировать. Управляемый режим позволяет блокировать меньше данных и позже по времени, что снижает конкуренцию, но требует грамотного кода. Большинство современных типовых конфигураций работают в управляемом режиме.
Сравнение режимов блокировок
Платформа сама блокирует все затрагиваемые данные. Просто, но при высокой нагрузке даёт избыточные блокировки и частые конфликты.
Разработчик явно указывает блокируемые данные. Меньше конфликтов и выше параллельность, но ошибки в коде приводят к некорректным данным или взаимоблокировкам.
Почему возникают ошибки и конфликты блокировок
Сообщение о конфликте блокировок означает, что транзакция попыталась захватить данные, уже заблокированные другой транзакцией, и не дождалась их освобождения. Наиболее частые причины:
- два пользователя одновременно проводят документы, изменяющие одни и те же регистры (например, остатки по одному складу);
- длительные операции — массовая обработка, обмен данными, закрытие месяца — удерживают блокировки, пока остальные пытаются работать;
- фоновые задания и регламентные операции запускаются в часы активной работы пользователей;
- в коде блокировка устанавливается раньше, чем нужно, или захватывает избыточный диапазон данных;
- взаимоблокировка: две транзакции захватили разные ресурсы и ждут друг друга — СУБД принудительно завершает одну из них.
Единичный конфликт блокировок при интенсивной работе — нормальное явление: платформа предлагает повторить операцию. Тревожным признаком является систематичность: одни и те же пользователи, одни и те же документы, одно и то же время суток.
Повторить операцию — обычно достаточно
Искать конкурирующий процесс: обмен, фоновое задание, обработку
Проверить расписание регламентных заданий и обменов
Смотреть активные сеансы и длительные транзакции на СУБД
Как диагностировать источник блокировок
Диагностика начинается с локализации: кто, когда и что блокирует. Для этого есть несколько штатных инструментов.
Первый источник — технологический журнал. Включив сбор событий TLOCK, TDEADLOCK и TTIMEOUT, можно увидеть, какие транзакции конфликтовали, какие данные захватывали и как долго длилось ожидание. Это основной инструмент для анализа повторяющихся проблем.
Второй источник — консоль кластера серверов 1С: список сеансов и соединений показывает, какие пользователи и фоновые задания активны, какие из них долго выполняются. На стороне СУБД (MS SQL Server, PostgreSQL) доступны представления активных блокировок и запросы, показывающие цепочки ожидания.
- 1Зафиксируйте время, пользователя и операцию, при которой возникла ошибка
- 2Проверьте, не выполнялись ли в этот момент обмены, фоновые задания, закрытие периода
- 3Включите в технологическом журнале события TLOCK и TDEADLOCK и дождитесь повторения
- 4Проанализируйте журнал: найдите пару конфликтующих транзакций и данные, за которые они конкурировали
- 5Определите, решается проблема организационно (разнести операции по времени) или требует доработки кода
Что можно сделать без доработки конфигурации
Значительная часть конфликтов блокировок устраняется организационными мерами, без изменения кода:
- разнести по времени тяжёлые операции: обмены, перепроведение, закрытие месяца перенести на нерабочие часы;
- настроить расписание регламентных заданий так, чтобы они не пересекались друг с другом и с пиками работы пользователей;
- избегать массового перепроведения документов в рабочее время;
- не держать открытыми на редактирование объекты, которые не изменяются — объектная блокировка держится, пока форма открыта;
- при повторяющихся конфликтах по одному регистру рассмотреть включение разделения итогов или пересмотр порядка работы подразделений.
Если конфликты вызваны типовым кодом конфигурации и высокой нагрузкой, самостоятельные меры исчерпаны — нужна оптимизация: сокращение транзакций, перенос блокировок ближе к записи, анализ запросов. Это работа для разработчика, знакомого с механизмом управляемых блокировок.
Как снизить конкуренцию за данные в коде
Для разработчиков основные приёмы снижения конфликтов связаны с дисциплиной транзакций. Чем короче транзакция и чем позже в ней устанавливается блокировка, тем меньше вероятность конфликта.
Практические правила: выполнять все длительные расчёты и запросы до установки блокировки; блокировать только те данные, которые реально будут изменены; при записи нескольких наборов регистров соблюдать единый порядок обращения к таблицам во всех местах кода — это главная профилактика взаимоблокировок; не вызывать внутри транзакции интерактивные действия, ожидающие пользователя.
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
Элемент.УстановитьЗначение("Склад", Склад);
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();Пример выше показывает управляемую блокировку по конкретному складу: блокируется только нужный диапазон данных, а не вся таблица регистра. Такой подход позволяет параллельно проводить документы по разным складам без конфликтов.
Как понять, что проблема решена
После принятых мер результат проверяется наблюдением, а не предположением. Критерии успеха: ошибки конфликтов блокировок перестали появляться в журнале регистрации и у пользователей; длительные операции выполняются в отведённые окна без пересечений; в технологическом журнале события TDEADLOCK отсутствуют или стали единичными.
Как проверить результат
Ошибок конфликтов нет или единичные случаи
Повторяющиеся ошибки по тем же объектам
TDEADLOCK отсутствуют, ожидания блокировок короткие
Регулярные взаимоблокировки, длительные TLOCK
Документы проводятся с первого раза
Пользователям приходится повторять операции
Тяжёлые операции вне рабочих часов
Обмены и закрытие периода идут днём
Часто задаваемые вопросы
Опасна ли ошибка «Конфликт блокировок при выполнении транзакции» для данных?
Нет, сама по себе ошибка означает, что платформа защитила данные: транзакция была отменена, и изменения не зафиксированы. Данные остаются в согласованном состоянии. Достаточно повторить операцию. Опасна не ошибка, а привычка пользователей обходить её нештатными способами.
Почему документ «заблокирован другим пользователем», хотя тот уже вышел из программы?
Сеанс мог завершиться аварийно, и блокировка осталась висеть на сервере до тайм-аута. Обычно она снимается автоматически в течение нескольких минут. Если этого не происходит, администратор может завершить «зависший» сеанс через консоль кластера серверов 1С.
Можно ли полностью отключить блокировки, чтобы не было ошибок?
Нет. Блокировки — неотъемлемая часть механизма целостности данных. Их отключение или обход привёл бы к порче учётных данных: двойным списаниям, расхождениям итогов. Задача — не убрать блокировки, а сократить время их удержания и конкуренцию за данные.
Что такое взаимоблокировка и кто виноват?
Взаимоблокировка (deadlock) — ситуация, когда две транзакции захватили разные ресурсы и каждая ждёт освобождения чужого. СУБД автоматически завершает одну из них. Причина обычно в разном порядке обращения к таблицам в разных участках кода; устраняется унификацией порядка блокирования.
Мешают ли блокировкам режимы совместимости и версия платформы?
Режим совместимости влияет на поведение механизмов платформы, включая блокировки: старые режимы могут использовать автоматическое управление там, где новые версии применяют управляемое. При обновлении платформы и конфигурации стоит проверять этот аспект, особенно в самописных решениях.
Когда нужно привлекать разработчика, а не администратора?
Администратор решает проблемы расписаний, сеансов и нагрузки. Разработчик нужен, когда конфликты вызваны логикой кода: длинными транзакциями, ранней установкой блокировок, неунифицированным порядком записи регистров. Признак — ошибки повторяются при конкретных операциях независимо от времени суток.
Что важно запомнить
Блокировки в 1С защищают данные от порчи при параллельной работе — это нормальный механизм, а не сбой. Конфликты устраняются разнесением тяжёлых операций по времени, короткими транзакциями и точечным блокированием данных. Диагностика ведётся через технологический журнал и консоль кластера; принудительный сброс сеансов — крайняя мера.