1С блокировка

Содержание

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

Как это сделать?

Поддержка конфигурации 1С

Все типовые конфигурации 1С стоят на поддержке.

Это значит:

  • Вы можете обновить конфигурацию обновлением от 1С нажатием одной кнопки
  • Конфигурацию 1С нельзя изменить.

Чтобы изменить 1С – нужно снять блокировку. Однако это значит, что дальнейшее обновление 1С будет происходить немного по-другому. Как именно – зависит от способа разблокировки.

Моя конфигурация на поддержке?

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

Если конфигурация на поддержке (и заблокирована), то в окне конфигурации напротив всех объектов будет стоять замочек. Это значит:

  • обновление загружается автоматически
  • изменить в 1С нельзя ничего.

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

  • обновление загружается автоматически
  • изменить 1С можно, но не все и аккуратно.

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

  • обновление загружается вручную (возможно обновить автоматически, отменив все проведенные изменения)
  • изменить 1С можно и как угодно.

Убрать блокировку изменения 1С

В меню Конфигурация / Поддержка / Настройка поддержки (в конфигураторе!) можно открыть окно управления поддержкой.

Окно выглядит следующим образом.

Для того, чтобы снять блокировку изменения 1С, необходимо нажать кнопку «Включить возможность изменения».

После изменения режима, нужно закрыть это окно, и выбрать меню «Конфигурация / Обновить конфигурацию базы данных».

Обратите внимание, что нажатие на кнопку необратимо.

Теперь Вы можете вносить изменения в конфигурацию. Все «типовые» элементы будут помечены желтым кубом. Все добавленные Вами элементы ее будут помечены никак.

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

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

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

Другое использование поддержки

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

Ваша технология будет следующей:

  • На одну из баз данных Вы накатываете изменения, например обновления 1С «сложным способом»
  • Выпускаете обновления для всех остальных баз
  • Остальные базы обновляются автоматическим обновлением.

Технология создания таких обновлений следующая.

Самостоятельное создание файла обновления производится путем сравнения сохраненной ранее CF с текущими изменениями в конфигурации. Изменения записываются в файл обновления.

Поэтому при планировании создания таких файлов обновления не забывайте о необходимости наличия выгрузки до проведения изменений.

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

Особенности управляемого режима блокировок

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

Существенный минус заключается в том, что разработчику приходиться самостоятельно контролировать непротиворечивость данных при их вводе и обработке. Вполне вероятно, что после включения режима управляемых блокировок придется написать немало проверок, чтобы достичь прежнего уровня безопасности. Несмотря на это, многие компании предпочитают перейти на управляемый режим, если возможности это позволяют.

При разработке программных проверок и ограничений важно помнить про особенность управляемых блокировок – любая из них держится до конца транзакции. Из этого следует, что программистам надо устанавливать блокировку ближе к концу транзакции, чтобы вероятность ожидания была минимальна. Если вам нужно сделать расчеты и записать их результат, то наложение блокировки правильнее прописать после расчетов.

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

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

Переключение в управляемый режим

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

  • В первую очередь нужно изменить режим управления блокировкой данных для конфигурации. Для этого в конфигураторе откройте дерево конфигурации и в свойствах корневого элемента в разделе «Совместимость» измените режим. Выберите пункт «Автоматический и управляемый», чтобы не возникало ошибок до того, как все объекты будут переведены на новый режим;

Рис.1 Выберите пункт «Автоматический и управляемый»

  • Теперь настает очередь документов. Ведь именно с их помощью мы регистрируем все события, которые нужно контролировать. Начинать перевод на управляемые блокировки 1С нужно с самых загруженных документов. На вкладке «Прочее» указываем режим блокировок «Управляемый»;
  • Находим все регистры, связанные с уже обработанным документом и переводим их в управляемый режим по аналогичному документам методу;
  • Следующий этап включает в себя поиск и изменение всех транзакций с измененными объектами. Сюда входят и явные изменения, включающие ключевые слова «НачатьТранзакцию()», так и все обработчики документов и регистров, включающие транзакции;

НачатьТранзакцию() Для Каждого ДокументНаУдаление ИЗ СпискаДокументов Цикл ОбъектДокумента = ДокументНаУдаление.ПолучитьОбъект(); Попытка ОбъектДокумента.УстановитьПометкуУдаления(Истина); Исключение Отказ = Истина; ОтменитьТранзакцию(); Сообщить(«Не удалось удалить документ » + ОбъектДокумента); Прервать; КонецПопытки; КонецЦикла; ЗафиксироватьТранзакцию();

  • Исключить оператор языка запросов «ДЛЯ ИЗМЕНЕНИЯ». Заменить его можно объектом «БлокировкаДанных» с необходимостью изменить запрос и алгоритм его вызова и обработки.

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

Транзакция — это неделимая, с точки зрения воздействия на базу данных, последовательность операций манипулирования данными, выполняющаяся по принципу «все или ничего», и переводящая базу данных из одного целостного состояния в другое целостное состояние.

Если по каким-либо причинам одно из действий транзакции невыполнимо или произошло какое-либо нарушение работы системы, база данных возвращается в то состояние, которое было до начала транзакции (происходит откат транзакции).

Блокировка (в общем случае) — это информация о том, что данный ресурс «захвачен» кем-то для выполнения какого-то действия.

Суть блокировки:

  • запрет некоторых действий над общим ресурсом на некоторое ограниченное время.

В силу различных причин блокировки могут быть:

  1. необходимыми («хорошими») — благодаря им обеспечивается предсказуемость действий пользователей, целостность и непротиворечивость данных;
  2. избыточными («плохими»).

В системе 1С:Предприятие 8 различают:

  • объектные блокировки (позволяют осуществлять конкурентный доступ пользователей к данным 1С:Предприятия в терминах объектов информационной базы, например, при интерактивной работе пользователей в формах: редактировании существующих объектов, удалении, создании новых и др.);
  • транзакционные блокировки (обеспечивают конкурентный доступ к данным в целях целостности и непротиворечивости хранимых данных).

Механизм объектных блокировок в 1С

Виды блокировок объектов базы данных 1С:

  1. объектная пессимистическая;
  2. объектная оптимистическая;

Объектная пессимистическая блокировка

Пессимистическая блокировка объектов базы данных предназначена для запрета изменения данных определенного объекта другими сеансами или данным сеансом до тех пор, пока блокировка не будет снята этим объектом встроенного языка.

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

Пессимистическая блокировка объектов базы данных:

  • используется системой 1С:Предприятие для блокировки объектов, редактируемых в форме;
  • устанавливается:
    1. автоматически — в момент начала модификации объекта в форме, указанного в качестве основного реквизита формы (при этом если другой пользователь попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект);
    2. программно — метод объектов Заблокировать() или метод глобального контекста ЗаблокироватьДанныеДляРедактирования().
  • снимается, когда пользователь, редактировавший объект, закроет форму объекта.

Пример

Войдем в информационную базу под пользователем Иванов, откроем форму элемента 1С:Предприятие 8.0. Управление торговлей справочника Номенклатура (код 12) и изменим цену продажи с 420,00 на 450,00. Не сохраняя сделанные изменения, войдем в информационную базу еще раз, но теперь под именем пользователя Петров. Откроем форму того же элемента справочника и попробуем изменить значение какого-либо реквизита. Любая попытка изменения приведет к появлению специального окна с сообщением об ошибке:

Таким образом пессимистическая блокировка гарантирует, что пользователь, начав изменять данные объекта, сможет записать эти изменения в информационную базу.

Использование объектной пессимистической блокировки

Прежде чем изменять существующий объект информационной базы из кода на встроенном языке, следует предварительно его заблокировать (установить «блокировку данных для редактирования» или «объектную блокировку»), тем самым:

  1. убедиться, не заблокирован ли он другими объектами;
  2. попытаться предотвратить его изменение другими пользовательскими сеансами (или другими экземплярами объекта в этом же сеансе).

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

Примеры

Пример № 1.

Требуется заблокировать объект и, если это удалось, модифицировать данные. В противном случае – проинформировать пользователя об отказе в выполнении операции с помощью сообщения вида:

1С (Код)

Аналогичным образом, можно воспользоваться методом глобального контекста ЗаблокироватьДанныеДляРедактирования:

1С (Код)

1 2 3 4 5 6 7 8 ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями; в случае блокировки — // вывести пользователю сообщение об исключении. ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка); // Затем изменить и записать объект ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать();

Пример № 2.

Требуется пропустить обработку объекта, если он заблокирован для редактирования. При очередном вызове процедуры (например, из фонового или регламентного задания) будет предпринята повторная попытка изменения объекта.

1С (Код)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Объект = ТекущаяВерсия.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями УстановитьПолноеНаименование = Истина; Попытка ФайлОбъект.Заблокировать(); Исключение // в случае блокировки — не выполнять изменение объекта УстановитьПолноеНаименование = Ложь; // записать предупреждение в журнал регистрации ЗаписьЖурналаРегистрации(НСтр(«ru = ‘Фоновое обновление имен файлов'», Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Предупреждение,, ФайлОбъект, ОписаниеОшибки()); КонецПопытки; // Пропустить обработку объекта, если он заблокирован. Если УстановитьПолноеНаименование Тогда Объект.ПолноеНаименование = ПолноеНаименование; Объект.Записать(); КонецЕсли;

Не следует проверять блокировку объектов для редактирования в следующих случаях:

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

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

ВАЖНО! Объектные блокировки не влияют на операции над данными и на процесс течения транзакций (они расположены на другом уровне работы с данными):

  1. если блокировка объекта вызвала исключение, то оно может быть обработано разработчиком конфигурации и не приведет к обязательному откату транзакции;
  2. блокировки объектов, установленные в течение транзакции, сохраняются при фиксации транзакции и снимаются при откате транзакции.

Объектная оптимистическая блокировка

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

Таким образом оптимистическая блокировка гарантирует, что пользователь изменяет актуальные данные объекта, которые хранятся в информационной базе, а не какой-то их предыдущий вариант.

Фактически, оптимистическая блокировка представляет собой проверку, которая выполняется перед записью объекта в базу данных. Эта проверка построена на анализе номера версии объекта, хранящейся в базе данных и номера версии, помещенной в память компьютера в момент считывания данных из информационной базы. Если при записи объекта номера его версий отличаются, то будет выдано предупреждение о том, что версия объекта изменилась или он был удален, то есть сработает оптимистическая блокировка.

Примеры

Рассмотрим пример. Откроем два сеанса работы с прилагаемой к работе информационной базой: один под пользователем Иванов, а другой — под пользователем Петров. В обоих сеансах откроем откроем форму элемента Управление торговлей справочника Номенклатура (код 12). Теперь в сеансе, открытом от имени пользователя Иванов, изменим цену продажи с 420,00 на 450,00 и запишем сделанные изменения. После этого, в сеансе, открытом от имени пользователя Петров попробуем изменить значение какого-либо реквизита. Любая попытка изменения приведет к появлению другого окна с сообщением об ошибке:

Механизм транзакционных блокировок

Возможные проблемы при многопользовательском доступе к одним и тем же данным

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

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

  1. Проблема потерянного изменения (англ. The Lost Update Problem) — если две транзакции изменяют одни и те же данные, взяв в качестве первоисточника начальное значение этих данных, то в системе останутся изменения внесенные той транзакцией, которая записала свои изменения последней, поскольку эти изменения заменят собой все изменения, внесенные до этого. Вывод:
    • нельзя одновременно изменять одни и те же данные.
  2. Проблема «грязного» чтения (англ. The Uncommitted Dependency Problem) — если одна транзакция начнет считывать некоторые данные не дождавшись окончания внесения изменений, вносимых в эти данные другой транзакцией, то достаточно вероятен случай, когда прочитанные данные будут содержать неверную информацию. Вывод:
    • нельзя читать уже измененные, но еще не записанные данные.
  3. Проблема неповторяемого чтения (англ. The Inconsistent Analysis Problem) — если одна транзакция несколько раз считывает одни и те же данные, а вторая — вносит изменения в эти данные между циклами чтения данных первой транзакции, то при повторном считывании первая транзакция может получить другой набор данных. Вывод:
    • нельзя повторно читать измененные и записанные данные, если эти же самые данные уже были прочитаны до внесения в них изменений.
  4. Проблема чтения фантомов (англ. The Phantom Read Problem) — если первая транзакция считывает данные и потом на их основе осуществляет определенные действия, а вторая транзакция в этот момент добавляет в эти данные новую информацию, то как и в предыдущем случае это может привести к некорректному результату. Вывод:
    • нельзя вводить новые данные (удалить имеющиеся), если они могут попасть в уже один раз прочитанные данные при повторном чтении.

Строго говоря, список вышеперечисленных проблем не является окончательным.

Уровни изоляции транзакций

Уровни изоляции транзакций в современных СУБД являются механизмом гибкой настройки ограничений, позволяющих:

  1. допустить параллельное выполнение транзакций ради увеличения производительности системы;
  2. обеспечить необходимую степень целостности данных (ограничить параллельность транзакций при работе с одними ресурсами).

Например, MS SQL Server 2000 позволяет использовать следующие уровни изоляции транзакции:

  • READ UNCOMMITED — незавершенное чтение. Низший уровень изоляции, обеспечивает максимальную параллельность выполнения транзакций. Данный уровень защищает изменяемые текущей (актуальной) транзакцией данные от изменений, которые могут внести конкурирующие транзакции. Если другой транзакции необходимо изменить те же самые данные, то она должна ожидать завершения изменения данных текущей (актуальной) транзакцией. Однако чтение данных разрешено. Таким образом этот уровень изоляции допускает чтение незавершенных изменений данных.
  • READ COMMITED — обеспечивает запрет «грязного» чтения. Если текущая (актуальная) транзакция начала изменять данные, то конкурирующая транзакция не может не только изменить, но даже прочитать их до завершения изменений, вносимых текущей (актуальной) транзакцией. После того, как изменения, вносимые текущей (актуальной) транзакцией закончены, конкурирующие транзакции могут читать данные, не дожидаясь окончания текущей (актуальной) транзакции в целом. Таким образом решается проблема неповторяемого чтения.
  • REPEATABLE READ — обеспечивает повторяемость чтения данных. Если текущая (актуальная) транзакция начинает читать данные, то другая транзакция не может их изменить до окончания текущей (актуальной) транзакции.
  • SERIALIZABLE — последовательное выполнение. Этот уровень изоляции является максимальным и обеспечивает полную изоляцию транзакций друг от друга. Решаются все рассмотренные проблемы, включая проблему «фантомов».

В зависимости от используемого уровня изоляции, СУБД накладывает различные типы блокировок на различные объекты базы данных на различное время.

Режим автоматических блокировок

В режиме автоматических блокировок 1С:Предприятие целиком «полагается» на возможности, предоставляемые СУБД.

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

СУБД
Файловая база данных MS SQL Server IBM DB2 PostgreSQL
Вид блокировок Таблиц Записей Записей Таблиц
Уровень изоляции транзакций Serializable Repeatable Read или Serializable Serializable Read Committed

Режим автоматических блокировок:

  1. может привести к возникновению избыточных блокировок;

  2. не позволяет достичь желаемой параллельности работы пользователей.

В клиент-серверном варианте блокировка данных происходит на уровне записей, однако может быть заблокирована и вся таблица целиком (например, в результате выбора СУБД неоптимального плана выполнения запроса).

Тип блокировок, устанавливаемых в том или ином случае, зависит от вида операции, используемого 1С:Предприятием уровня изоляции транзакций и определяется внутренними механизмами самой СУБД (например, MS SQL Server).

Режим управляемых блокировок

В 1С:Предприятии реализован дополнительный режим работы, позволяющий использовать собственный менеджер транзакционных блокировок 1С:Предприятия, независимый от используемой СУБД.

Управляемые блокировки 1С:Предприятия учитывают логическую структуру прикладного решения и поэтому позволяют максимально точно блокировать необходимые области данных (в отличие от использовавшихся ранее блокировок СУБД, которым не известна логическая структура системы). Таким образом менеджер управляемых блокировок позволяет избежать возникновения избыточных блокировок, блокируя только действительно необходимые области данных.

При работе в этом режиме система использует гораздо более низкий уровень изоляции транзакций для MS SQL Server и IBM DB2, и блокировку на уровне записей для PostgreSQL, что позволяет достичь более высокой параллельности работы пользователей:

СУБД
Файловая база данных MS SQL Server IBM DB2 PostgreSQL
Вид блокировок Таблиц Записей Записей Записей
Уровень изоляции транзакций Serializable Read Committed Read Committed Read Committed

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

  • обеспечить неизменность считываемых в транзакции данных (разделяемая блокировка);
  • запретить чтение данных другими транзакциями (исключительная блокировка).

Порядок действия механизма управляемых блокировок:

  1. любой запрос к данным прежде всего обрабатывается собственным менеджером транзакционных блокировок 1С:Предприятия; если на уровне 1С:Предприятия конфликт управляемых блокировок не обнаруживается, то запрос передается далее, на исполнение СУБД;
  2. СУБД использует собственный механизм блокировок для определения конфликтующих транзакций, но уже с более низким уровнем изоляции транзакций, чем в режиме автоматических блокировок.

Установка режима управления блокировками для объектов конфигурации

В структуре объектов конфигурации существует несколько возможностей для задания режима управления блокировками:

  1. через свойство «Режим управления блокировкой данных» в палитре свойств конфигурации и(или) объекта;
  2. установка управляемых блокировок средствами встроенного языка.

Установка режима управления блокировками через свойство «Режим управления блокировкой данных» в палитре свойств конфигурации или объекта

  • режим Автоматический — используются автоматические блокировки, устанавливаемые СУБД. Собственный менеджер блокировок 1C:Предприятия не задействован.
  • режим Управляемый — система всегда самостоятельно устанавливает необходимые управляемые блокировки, обрабатываемые собственным менеджером транзакционных блокировок (независимо от того, какие режимы управления блокировками установлены для конкретных объектов конфигурации). Этот режим предназначен для работы всей конфигурации только с управляемыми блокировками в транзакции.
  • режим Автоматический и управляемый — для конкретного объекта конфигурации режим блокировки будет определяться значением свойства Режим управления блокировкой данных самого объекта конфигурации. Этот режим предназначен для постепенного или частичного перевода конфигурации в режим управляемых блокировок. Он позволяет отдельным объектам метаданных работать с управляемыми блокировками (например, наиболее «проблемным» документам и регистрам), в то время как остальные объекты работают в режиме автоматических блокировок.

Сочетания режимов управления блокировками в транзакции в режиме Автоматический и управляемый:

Режим существующей транзакции Режим начинаемой транзакции Результат
Автоматический Автоматический Начинаемая транзакция будет выполнена в автоматическом режиме
Управляемый Управляемый Начинаемая транзакция будет выполнена в управляемом режиме
Автоматический Управляемый Начинаемая транзакция будет выполнена в автоматическом режиме
Управляемый Автоматический Будет вызвана исключительная ситуация

Особенности режимов управления блокировками для документов

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

Интерактивное проведение документа по регистру делает две транзакции:

  1. запись самого документа;
  2. внутри этой записи (транзакции) запись набора строк по регистру.

В зависимости от режима управления блокировками для самого документа и двигаемого им регистра, возможны четыре ситуации:

  1. Режим документа Автоматический, режим регистра Автоматический -> запись по регистру в автоматическом режиме
  2. Режим документа Управляемый, режим регистра Управляемый-> запись по регистру в управляемом режиме
  3. Режим документа Автоматический, режим регистра Управляемый -> запись по регистру в автоматическом режиме
  4. Режим документа Управляемый, режим регистра Автоматический -> исключительная ситуация (ошибка)

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

  1. свойство конфигурации Режим управления блокировкой данных необходимо установить в значение Автоматический и управляемый;
  2. свойство Режим управления блокировкой данных объекта метаданных документ необходимо установить в значение Управляемый;
  3. у всех регистров, по которым данный документ выполняет движения, следует установить свойство Режим управления блокировкой данных в значение Управляемый;
  4. проанализировать процедуру проведения документа на предмет наличия:
    • явных вызовов транзакций
    • неявных вызовов транзакций, которые выполняются системой при модификации данных каких-либо объектов конфигурации
  5. для найденных явных и неявных вызовов транзакций обеспечить их выполнение в управляемом режиме
    • для явных вызовов — параметр метода НачатьТранзакцию();
    • для неявных вызовов — свойство Режим управления блокировкой данных модифицируемого объекта конфигурации;
  6. в теле процедуры проведения документа установить необходимые управляемые блокировки.

Установка управляемых блокировок средствами встроенного языка

Средствами встроенного языка установка управляемых блокировок внутри явной или скрытой (неявной) транзакции происходит с помощью специального объекта БлокировкаДанных, который предназначен для явной блокировки данных от чтения или изменения другими сессиями.

Описание доступных свойств и методов которого можно посмотреть в синтакс-помощнике в ветви «Общие объекты» — «Управление блокировкой данных».

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

При добавлении нового элемента блокировки для него необходимо указать пространство блокировок, которое будет блокировать данный элемент. Пространства блокировок определены в платформе 1С:Предприятия 8.1 и соответствуют структуре прикладных объектов конфигурации.

Допустимы следующие имена пространств блокировок и имена полей пространств блокировок:

  • для объектных данных (справочник, документ и др.) определено единственное пространство блокировки — сам объект данных;
  • для необъектных данных (например, регистры) определено по два пространства блокировок, которые имеют разный логический смысл.

Перечень допустимых имен

Пространство блокировок с суффиксом НаборЗаписей используется в тех случаях, когда необходимо заблокировать сами записи данного объекта (например, при добавлении новых записей).

Пространство блокировок без суффикса используется тогда, анализируются некоторые данные этого объекта (например, остатки регистра), или когда выполняются какие-либо операции, приводящие к изменению существующих данных объекта (например, восстановление границы последовательности).

Порядок действий при установке управляемых блокировок средствами встроенного языка:

  1. добавить элемент блокировки, соответствующий некоторому пространству блокировок;
  2. установить для этого элемента режим блокировки (разделяемая или исключительная);
  3. определить значения полей блокировки (указать, какие же именно записи будут заблокированы — для каждого пространства блокировок в платформе определены имена полей, значения которых могут задаваться при установке тех или иных блокировок).

ВНИМАНИЕ!

Следует понимать, что, в данном случае речь не идет о реальных записях базы данных. Несмотря на то, что управляемые блокировки описываются в терминах объектов метаданных и их полей, эти блокировки никак не связаны с реальной структурой хранения данных 1С:Предприятия в СУБД. Это всего лишь записи о том, что заблокировано «нечто».

Иногда можно провести аналогию между управляемыми блокировками и реальными записями СУБД. Например, для объектных данных блокировка объекта с указанной ссылкой будет «соответствовать» блокировке всех записей, содержащих указанную ссылку, во всех таблицах этого объекта метаданных (в основной таблице и в таблицах его табличных частей).

Однако в других случаях провести такую аналогию достаточно затруднительно, да и не нужно. Например, при блокировке регистра бухгалтерии с указанием значения вида субконто, мы запрещаем другим транзакциям каким-либо образом изменять «записи» регистра бухгалтерии, у которых значение вида субконто равно указанному нами. Как при этом данное условие «проецируется» на реальную структуру данных регистра бухгалтерии — для нас совершенно не важно.

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

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

Для каждого пространства блокировок количество устанавливаемых условий не ограничено.

Способы задания условий на поля пространств блокировки

Существует два способа задания условий на поля пространств блокировки:

  1. с помощью явного задания имени поля и его значения;
  2. с помощью указания источника данных, содержащего необходимые значения.

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

При явном задании имени поля и его значения необходимо использовать метод УстановитьЗначение() объекта ЭлементБлокировкиДанных. В этом случае имя и значение указывают в качестве параметров метода, например так, как показано в листинге 1.

Листинг 1

Листинг 1. Пример установки условия блокировки записей с помощью явного указания имени поля и его значения

Для значений типа Дата или Число в качестве значения может быть задан некоторый диапазон значений. Диапазон значений передается методу с помощью объекта встроенного языка — Диапазон. Данный объект позволяет задать верхнюю и нижнюю границы диапазона, причем в диапазон включаются и границы диапазона (листинг 2).

Листинг 2

Листинг 2. Пример установки условия блокировки записей с помощью задания диапазона

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

При указании источника данных сначала необходимо задать свойство ИсточникДанных объекта ЭлементБлокировкиДанных, после чего, используя метод ИспользоватьИзИсточникаДанных(), настроить соответствие полей области блокировки данных полям источника данных (листинг 3).

Листинг 3

Листинг 3. Пример установки условия блокировки записей с помощью источника данных

В качестве источника данных можно указывать:

  • результат запроса;
  • табличную часть;
  • набор записей;
  • таблицу значений.

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

Объект Диапазон также может являться значением поля источника данных.

Для установки всех созданных блокировок используется метод объекта БлокировкаДанных — Заблокировать():

  • Если метод выполняется внутри транзакции (явной или неявной), то блокировки устанавливаются в момент вызова метода. При окончании транзакции они будут сняты автоматически.
  • Если же метод Заблокировать() выполняется вне транзакции, то блокировки установлены не будут.

Что такое «блокировка данных» в «1С»? Краткое определение блокировки можно выразить так: блокировка – это «сообщение» о том, что определенный ресурс системы заблокирован или «захвачен» другим пользователем.

Какие бывают блокировки в «1С»?

1. «Хорошие» блокировки данных в «1С»

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

Итак, в магазин приходит Иванов, и ему нравится одна из 6 моделей лампочек (допустим, №4). Он собирается ее купить и достает из кошелька деньги. Продавец лампочек по натуре – рассеянный человек. Поэтому в целях усиления своей бдительности и контроля товара, он все записывает и сразу отмечает, что лампочка №4 продана Иванову. Эта запись и будет аналогией блокировки данных «1С».

На самом деле, Иванов еще не купил лампочку, а только собирается это сделать. Возможно, у него не хватит денег, и у него не получится ее приобрести. Но продавец уже записал, что лампочку нельзя предлагать другим покупателям до тех пор, пока Иванов не завершит покупку.

Весь этот процесс (от выбора лампочки до передачи денег продавцу и получения товара в руки) будет назваться «транзакцией». Блокировка ставится в момент выбора лампочки Ивановым и снимается после завершения транзакции – совершения покупки.

Но самое интересное только впереди. В магазин лампочек приходит Петров. Он сможет купить любую из 6 лампочек, кроме №4 (она ведь «забронирована» Ивановым). Если говорить об «1С», смысл блокировки данных заключается в том, чтобы на некоторое время запретить действия над общим ресурсом. В нашем случае Петрову запрещено выбирать лампочку №4. Только в случае отказа Ивановым о покупки лампочки, Петров сможет ее приобрести.

Сразу становится понятно, что в данном случае блокировка – это необходимое явление при конкурентном доступе к общему ресурсу. Иначе между Петровым и Ивановым возник бы конфликт. Возможно, и продавец попал бы «под раздачу».

2. «Плохие» блокировки в «1С»

Теперь рассмотрим иной вариант развития событий, чтобы пояснить, откуда берутся «плохие» блокировки данных в «1С».

Покупатель Иванов снова хочет купить лампочку. Он достает их из контейнера по одной, проверяя, какая ярче светит. Тем временем продавец записывает («блокирует») номера лампочек, которые понравились Иванову. Как раз в этот момент в магазин приходит Петров, но не может купить ни одной лампочки, потому что все они «захвачены» Ивановым.

Как поступает Петров? Некоторое время он ждет, но вскоре обижается и уходит. Именно это событие и соответствует возникающей в системе «1С» ошибке блокировки данных – «Превышение времени ожидания блокировки».

Если бы избыточной блокировки не возникло, то Петров тоже купил бы лампочку. Таких блокировок не должно быть в «1С».

Виды блокировок данных в «1С»

Ответим на этот вопрос с помощью рисунка.

Объектные блокировки

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

Объектные блокировки данных «1С» делятся на:

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

Транзакционные блокировки

Речь идет о блокировках на уровне СУБД. Такие блокировки напрямую связаны с понятием «транзакция». Вы можете узнать подробнее о том, что такое «транзакции» и зачем они нужны, в специальной статье.

Транзакционные блокировки «1С» делятся на автоматические и управляемые.

  • Автоматические. В автоматическом режиме ответственность за блокировки полностью лежит на СУБД. Это облегчает работу IT-специалиста «1С», но создание информационной системы для большого количества пользователей на автоматических блокировках нежелательно (особенно для СУБД PostgreSQL, Oracle BD, т.к. при модификации данных они полностью блокируют таблицу).
  • Управляемые. В управляемом режиме есть возможность использовать менеджер транзакционных блокировок данных «1С:Предприятие». В этом режиме система использует гораздо более низкий уровень изоляции транзакций для MS SQL Server и IBM DB2, и блокировку на уровне записей для PostgreSQL (см. таблицу 3). Это позволяет достичь более высокой параллельности работы пользователей.

Что еще нужно знать о блокировках?

Физические блокировки находятся в таблице syslockinfo базы данных master и имеют следующие обозначения:

  • S – разделяемая (чтения);
  • X – исключительная (блокировка на запись);
  • U – блокировка обновления (устанавливается в запросе с помощью конструкции «Для изменения»).

Некорректная работа транзакционных блокировок может привести к таким проблемам, как:

  • потерянное изменение;
  • грязное чтение;
  • неповторяемость чтения;
  • чтение фантомов.

Если вы столкнулись с проблемой блокировки данных в «1С» и не знаете, как ее исправить, обратитесь за бесплатной консультацией к специалистам «ГЭНДАЛЬФ».

Получить бесплатную консультацию

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

В случае, если управляемую блокировку установить не удалось в технологическом журнале будут зарегистрировано событие TLOCK.

В простых случаях, чтобы найти виновника таймаута или взаимной блокировки на управляемых блокировках, достаточно найти какую именно управляемую блокировку, несовместимую с блокировкой-жертвой, установило соединение, указанное в WaitConnections.

• ИТС: Мониторинг на продукционных серверах

Эскалация (укрупнение) блокировок это повышение гранулярности блокировки (lock granularity, в некоторых источниках — lock level, «уровень блокируемых данных»). Это процесс преобразования многих мелкогранулированных блокировок в меньшее число крупногранулированных блокировок при вероятном увеличении конкуренции параллелизма.
Эскалации бывают на СУБД и в менеджере управляемых блокировок. Их поведение различно. Различие состоит в том, что если в момент попытки эскалации на СУБД MS SQL кто-то другой будет держать блокировку, то эскалации не произойдет, но при этом транзакция дальше продолжит свое выполнение. Если в «1С:Предприятие» кто-то другой будет держать блокировку, то «эскалирующаяся» транзакция попадет в ожидание от всех, кто еще держит блокировки на этом ресурсе. Если в «1С:Предприятие» не получится проэскалироваться в течение N (по умолчанию 20) секунд, то транзакция получит таймаут.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 58-60.

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

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 48-49.

Для регистра сведений, подчиненного регистратору, пространства блокировок «DIMS» и «RECORDER» не конфликтуют.

Эскалацию управляемых блокировок запретить нельзя.

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

Чтение наборов записей регистров через объектную модель приводит к наложению управляемой блокировки.
Получение прикладного объекта через ПолучитьОбъект() всегда происходит с использованием объектной блокировки.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.

Если метод Заблокировать() коллекции БлокировкаДанных выполняется вне транзакции блокировки установлены не будут.

Чтобы определить время, которое управляемая блокировка ожидала освобождения ресурса необходимо смотреть на свойства события Lock:Aсquired в профайлере.

Блокирующее чтение остатков в начале транзакции
1.1. В ряде случаев необходимо выполнять блокирующее чтение итогов. Примером такой задачи является контроль остатков при проведении документа. Если в результате проведения документа остатки станут отрицательными, то транзакция должна быть отменена (проводить такой документ нельзя).
1.2. Операция чтения остатков должна быть блокирующей, то есть необходимо запретить двум пользователям одновременно читать один и тот же остаток за период, счет и значение измерения.
Если чтение будет неблокирующим, то возможна ситуация, при которой два пользователя одновременно прочитают один и тот же остаток (например 10 единиц) и примут решение о возможности списания части этого остатка. Если сумма списаний двух пользователей будет больше 10, то в итоге остаток получится отрицательным.
Например, первый пользователь спишет 8 единиц (8 меньше 10, следовательно операция разрешена), а второй пользователь спишет 6 единиц (на таком же основании). Результатом будет -4 единицы остатка, что недопустимо с точки зрения прикладной логики системы.
2. Обычно, для контроля остатков используется запрос в модуле набора записей регистра, который идет перед записью набора. При этом возможны следующие проблемы:

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

Для того чтобы минимизировать влияние блокирующего чтения остатков на производительность системы, необходимо:

  • Проанализировать, какие именно остатки нуждаются в блокирующем чтении и при каких обстоятельствах. Например, контроль остатков не требуется при проведении приходного документа, поскольку он может только увеличить остатки. Так же не требуется контролировать остатки при перепроведении документа, который списывает в этот раз не больше остатков чем при первом проведении (этот контроль уже проводился). И так далее.
  • В начале транзакции (например, в обработчике ОбработкаПроведения документа) в явном виде записать движения по всем регистрам, которые в данном случае не требуют контроля остатков. Следует всегда придерживаться одинакового порядка записи регистров (например, алфавитного). Необходимо обратить внимание на то, что у всех записываемых регистров накопления и бухгалтерии должен быть включен разделитель итогов, а у наборов записей свойство БлокироватьДляИзменения должна быть установлена в значение Ложь.
  • Выполнить все остальные действия, которые должны быть выполнены в рамках этой транзакции.
  • В самом конце транзакции в явном виде записать движения по тем регистрам, которые требуют контроля остатков. Для наборов записей этих регистров следует установить опцию БлокироватьДляИзменения в значение Истина. Это необходимо для предотвращения взаимоблокировки. Именно в этот момент времени будет установлена блокировка остатков регистра по данному набору значений измерений.
  • Для каждого регистра выполнить запрос контроля остатков. Следует обратить внимание, что в данном случае нет необходимости использовать явную управляемую блокировку (опцию ДЛЯ ИЗМЕНЕНИЯ — в автоматическом режиме), поскольку проверяемые остатки уже заблокированы их записью на предыдущем шаге. Запрос должен считывать только отрицательные остатки по заданному набору значений измерений. Если такие записи имеются, то транзакция должна быть отменена. Если запрос вернул пустой результат, то транзакция должна быть зафиксирована.

ИТС: Блокирующее чтение остатков в начале транзакции

На этот регистр в других транзакциях нельзя будет поставить блокировки, которые будут принадлежать плоскости «первой» или «второй» блокировок, установленных в первой транзакции.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

По технологическому журналу по событию TLOCK можно определить, какие именно управляемые блокировки были установлены.

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

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

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

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 60.

Эскалация определяется, например, по наличию в трассировке профайлера SQL Server события Lock:Escalation.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.

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

Уровни блокировки ресурсов управляемыми блокировками «1С:Предприятие»:
Разделяемый (Shared) — разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку.
Исключительный (Exclusive) — исключительная блокировка не позволит конкурирующему процессу установить разделяемую или исключительную блокировку по этому же условию.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

Виды объектных блокировок поддерживаемых в системе «1С:Предприятие»:
Пессимистическая блокировка исходит из предположения, что «если что-то плохое может случиться, это обязательно случится», то есть, если мы выполняем действие, конкурентное выполнение которого может привести к «поломке» данных, то правильным будет исключить возможность конкурентного исполнения.
Оптимистическая блокировка предполагает, что во время обновления записи в базе мы будем единственными, кто ее меняет. В большинстве случаев, так оно и есть (оптимизм оправдан). Но перед этим необходимо точно удостовериться, что запись с момента ее чтения не изменилась.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

Полей пространства блокировок для Константа.<имя> — нет.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для Перерасчет.<имя> — ВидРасчета.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для Перерасчет.<имя>.НаборЗаписей — ОбъектПерерасчета.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для Последовательность.<имя> — <имя измерения>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для Последовательность.<имя>.НаборЗаписей — Регистратор.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поля пространства блокировок для РегистрБухгалтерии.<имя> —
• Период;
• <вид движения> — значение системного перечисления ВидДвиженияБухгалтерии;
• Счет — обязательное поле;
• Субконто;
• <вид субконто>;
• <имя измерения>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для РегистрБухгалтерии.<имя>.НаборЗаписей — Регистратор.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поля пространства блокировок для РегистрНакопления.<имя> —
• Период;
• <имя измерения>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для РегистрНакопления.<имя>.НаборЗаписей — Регистратор.

• ИТС: Блокировки данных в 1С:Предприятии 8

Избыточная блокировка — блокировка, не обусловленная бизнес-логикой приложения.

• ИТС: Типичные причины избыточных блокировок и методы оптимизации

Поля пространства блокировок для РегистрРасчета.<имя> —
• ПериодРегистрации;
• ПериодДействия;
• <имя измерения>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для РегистрРасчета.<имя>.НаборЗаписей — Регистратор.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поля пространства блокировок для РегистрСведений.<имя> —
• Период — если есть;
• <имя измерения>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Поле пространства блокировок для РегистрСведений.<имя>.НаборЗаписей — Регистратор.

• ИТС: Блокировки данных в 1С:Предприятии 8

Пессимистическая блокировка гарантирует, что пользователь, начав изменять данные объекта, сможет записать эти изменения в информационную базу, а так же проблему неповторяемого чтения для объектов, редактируемых в форме.
Неповторяющееся чтение (non-repeatable read) — при повторном чтении в рамках одной и той же транзакции оказывается, что ранее прочитанные данные изменены или удалены;

• ИТС: Блокировки данных в 1С:Предприятии 8

Не важно, блокировались данные на уровне записей (строк), на уровне диапазона ключа или на уровне страницы. После эскалации они окажутся заблокированы на уровне таблицы, т.е. эскалация всегда происходит до уровня таблицы.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.

TDEADLOCK — обнаружена взаимоблокировка в управляемом режиме.
TTIMEOUT — превышение максимального времени ожидания транзакционной блокировки.

• ИТС: Описание и расположение служебных файлов

Существует два способа задания условий на поля пространств блокировки:

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

При явном задании имени поля и его значения необходимо использовать метод УстановитьЗначение() объекта ЭлементБлокировкиДанных. В этом случае имя и значение указывают в качестве параметров метода.

• ИТС: Блокировки данных в 1С:Предприятии 8

Уровни блокировки ресурсов управляемыми блокировками «1С:Предприятие»:
Разделяемый (Shared) — разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку.
Исключительный (Exclusive) — исключительная блокировка не позволит конкурирующему процессу установить разделяемую или исключительную блокировку по этому же условию.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

Таблица будет заблокирована целиком:
• в файловом режиме;
• всегда при эскалации блокировок;
• при работе с Oracle Database и PostgreSQL в автоматическом режиме блокировок;
• при использовании Clustered Index Scan или Table Scan в плане запроса;
• при записи пустого набора в пустую таблицу в автоматическом режиме блокировок.

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

• ИТС: Блокировки данных в 1С:Предприятии 8

Неявные управляемые блокировки платформой устанавливаются при чтении наборов записей и при записи любых объектов.

• ИТС: Блокировки данных в 1С:Предприятии 8
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.

Неявные управляемые разделяемые блокировки платформой устанавливаются при чтении набора записей.

• ИТС: Блокировки данных в 1С:Предприятии 8
• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.

Механизм объектных блокировок позволяет оповестить пользователей о захвате объектных данных «1С:Предприятия»: справочников, документов, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач, планов обмена.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 48.

Информация, какую именно управляемую блокировку, несовместимую с блокировкой-жертвой, установило соединение, указанное в WaitConnections, может находиться не в том же файле, где есть событие TDEADLOCK или TTIMEOUT. Она может быть в логах другого часа, другого рабочего процесса, и даже, если в кластере несколько серверов – в логах другого сервера.

Встроенный язык не поддерживает возможность явно снять определенную транзакционную блокировку.

Объектная оптимистичная блокировка предполагает, что во время обновления записи в базе данных мы единственные, кто меняет эту запись.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

Объектная пессимистичная блокировка предполагает, что если данные во-время записи в базу могут «поломаться» из-за конкурентного доступа, то они «поломаются», т.е. данные нельзя давать записывать в базу одновременно.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 49.

Поля пространства блокировок Регистратор и <имя измерения> не пересекаются потому, что поле пространства блокировок Регистратор относится к пространству Регистр(Сведений | Накопления | Бухгалтерии).<имя>.НаборЗаписей, а поле <имя измерения> относится к пространству Регистр(Сведений | Накопления | Бухгалтерии).<имя>.

• ИТС: Блокировки данных в 1С:Предприятии 8

Пространства блокировок определены в платформе «1С:Предприятия 8.1» и выше и соответствуют структуре прикладных объектов конфигурации.

• ИТС: Блокировки данных в 1С:Предприятии 8

Пространство блокировок без суффикса НаборЗаписей используется в тех случаях, когда анализируются некоторые данные этого объекта (например, остатки регистра), или когда выполняются какие-либо операции, приводящие к изменению существующих данных объекта (например, восстановление границы последовательности).

• ИТС: Блокировки данных в 1С:Предприятии 8

Пространство блокировок с суффиксом НаборЗаписей используется в тех случаях, когда необходимо заблокировать сами записи данного объекта (например, при добавлении новых записей).

• ИТС: Блокировки данных в 1С:Предприятии 8

Разделение итогов регистров накопления и бухгалтерии работает и в автоматическом режиме управления блокировками, и в управляемом, но в автоматическом режиме свойство БлокироватьДляИзменения вызывает исключительную ситуацию.

С 20000 записей в наборе начинается эскалация управляемых блокировок «1С:Предприятия 8.2».

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.

Со 100000 записей в наборе начинается эскалация управляемых блокировок «1С:Предприятия 8.3» в одной транзакции в информационной базе.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 59.

Таймаут на управляемых блокировках расследуется с помощью событий:
TLOCK — управление транзакционными блокировками в управляемом режиме.
TTIMEOUT — превышение максимального времени ожидания транзакционной блокировки.

• ИТС: Описание и расположение служебных файлов

Свойство БлокироватьДляИзменения при попытке использования в автоматическом режиме блокировки вызывает исключительную ситуацию.

• Синтакс-помощник

Правильный порядок событий в технологическом журнале при возникновении таймаута на управляемых блокировках: TLOCK виновника …(возможно, другие TLOCK)… TTIMEOUT TLOCK жертвы …(возможно, другие TLOCK)…

Управляемые блокировки при выполнении запроса не устанавливаются.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 50.

Уровень блокировки — это то, насколько блокировка совместима с другими блокировками, а уровень изоляции — это то, какие допускаются несогласованности при параллельной работе.
Уровень блокировки определяется сущностью выполняемых действий (чтение, обновление, запись), а уровни изоляции, отличные от используемых по умолчанию, могут быть установлены с использованием Transact-SQL или через API (application programming interface) базы данных.

• книга «Настольная книга 1С:Эксперта по технологическим вопросам», издание 2, с. 34-50.

Если в момент эскалации управляемой блокировки по определенному пространству блокировок в этом пространстве уже установлена какая-то несовместимая управляемая блокировка, возникнет ожидание при эскалации блокировки, пока несовместимая блокировка не будет снята либо не будет превышено время ожидания предоставления возможности установки блокировки.

Блокировка — это механизм, с помощью которого сервер (СУБД, а также 1С) синхронизирует одновременный доступ нескольких пользователей к одному фрагменту данных.

Избыточная блокировка — блокировка, не обусловленная бизнес-логикой приложения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *