Взаимоблокировки в 1С

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

Как появляется блокировка

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

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

  1.  Установка изоляции данных для их последующего изменения. Эта ошибка возникает в случае, если 2 сессии захватывают 1 ресурс. Однако после этого они не могут внести изменения в базу данных из-за того, что эта возможность заблокирована другой сессией. Следовательно, программа попадает в режим постоянного ожидания.
  2. Захват ресурсов одной БД в разных участках кода. Например, при одновременном проведении документов по покупке и продаже ТМЦ они оба вносят изменения в базу остатков. База данных заблокируется одновременно двумя запросами, что приведет к невозможности внести изменения.
  3. Избыточные блокировки. Это происходит в случае, когда программист в коде не обращает внимания на количество данных, которые использует скрипт. Следовательно, ресурсы захватываются, но не осввобождаются. Что приводит к блокировке работы.

Причины возникновения блокировки можно узнать с помощью специального события TDEADLOCK. Он возвращает информацию, которая позволяет определить название ресурса, тип блокировки, имена баз данных и т.п.

Избежать взаимных блокировок и устранить их можно с помощью следующих способов:

  • При обращении к базе для записи необходимо использоваться исключительную блокировку, что предотвратит двойное обращение к базе;
  • Предусматривать очередь для захвата данных и использовать базы данных по очереди;
  • Оптимизировать запросы в скриптах;
  • Не блокировать новые базы для записи до того, как скрипт освободит блокировку с предыдущих;
  • Устанавливать расписание работы с базами данных во избежание двойного захвата.

Услуги специалистов

Внесение серьезных изменений в типовые конфигурации программ 1С должны делать только специалисты. Поэтому, если вам не хватает стандартных возможностей 1С Бухгалтерия или других приложений на базе 1С Предприятие, обращайтесь за помощью к специалистам компании «ГК в Приоритете». Они помогут внести необходимые изменения без возникновения ситуации со взаимными блокировками.

Сервис обратного звонка RedConnect