Взаимоблокировки в 1С
Программа 1С Бухгалтерия и типовые конфигурации на базе 1С Предприятие являются многопользовательскими приложениями. Поэтому с базами данных одновременно может работать большое количество людей. Если две или более транзакции будут обращаться к одной и той же базе данных, последняя будет заблокирована, что приведет к неправильному завершению процесса. Рассмотрим, как избежать взаимной блокировки в приложениях версии 1С 8.3.
Как появляется блокировка
Типовые конфигурации 1С разработаны и отлажены таким образом, что в них не могут возникнуть взаимные блокировки, как бы долго вы не использовали приложения 1С Предприятие. Особенно в том случае, если количество одновременно работающих с базами данных пользователей небольшое.
Взаимные блокировки могут возникнуть в случае, если вы решили купить 1С и самостоятельно оптимизировать некоторые процессы и модули под собственные нужды. В этом случае возможно возникновение указанных ошибок. Причин подобной ситуации может быть несколько:
- Установка изоляции данных для их последующего изменения. Эта ошибка возникает в случае, если 2 сессии захватывают 1 ресурс. Однако после этого они не могут внести изменения в базу данных из-за того, что эта возможность заблокирована другой сессией. Следовательно, программа попадает в режим постоянного ожидания.
- Захват ресурсов одной БД в разных участках кода. Например, при одновременном проведении документов по покупке и продаже ТМЦ они оба вносят изменения в базу остатков. База данных заблокируется одновременно двумя запросами, что приведет к невозможности внести изменения.
- Избыточные блокировки. Это происходит в случае, когда программист в коде не обращает внимания на количество данных, которые использует скрипт. Следовательно, ресурсы захватываются, но не осввобождаются. Что приводит к блокировке работы.
Причины возникновения блокировки можно узнать с помощью специального события TDEADLOCK. Он возвращает информацию, которая позволяет определить название ресурса, тип блокировки, имена баз данных и т.п.
Избежать взаимных блокировок и устранить их можно с помощью следующих способов:
- При обращении к базе для записи необходимо использоваться исключительную блокировку, что предотвратит двойное обращение к базе;
- Предусматривать очередь для захвата данных и использовать базы данных по очереди;
- Оптимизировать запросы в скриптах;
- Не блокировать новые базы для записи до того, как скрипт освободит блокировку с предыдущих;
- Устанавливать расписание работы с базами данных во избежание двойного захвата.
Услуги специалистов
Внесение серьезных изменений в типовые конфигурации программ 1С должны делать только специалисты. Поэтому, если вам не хватает стандартных возможностей 1С Бухгалтерия или других приложений на базе 1С Предприятие, обращайтесь за помощью к специалистам компании «ГК в Приоритете». Они помогут внести необходимые изменения без возникновения ситуации со взаимными блокировками.