1с параметры блокировки изменения объекта

Обновлено: 07.07.2024

В сводном виде отличия при работе в режиме автоматических блокировок и в режиме управляемых блокировок приведены в следующей таблице:

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

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

● с помощью явного указания имени поля и значения (метод УстановитьЗначение() объекта ЭлементБлокировкиДанных );
● с помощью указания источника данных, содержащего необходимые значения (свойство ИсточникДанных объекта ЭлементБлокировкиДанных ).

Для каждого элемента блокировки может быть задан один из двух режимов блокировки:

Таблица совместимости управляемых блокировок выглядит следующим образом

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

Особенности работы в режиме «Автоматический и управляемый»

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

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

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

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

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

Заблокировать произвольный объект можно двумя способами:

  • Используя метод Заблокировать() объекта метаданных ссылочного типа (Справочники, Документы и т.п.);
  • Используя метод ЗаблокироватьДанныеДляРедактирования() глобального контекста;

Давайте рассмотрим примеры работы с каждым из этих методов

Метод Заблокировать()

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

Недостатки: Метод доступен только в контексте сервера, толстого клиента или внешнего соединения

Метод ЗаблокироватьДанныеДляРедактирования()

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

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

С учетом этого, перепишем предыдущий пример следующим образом:

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

Блокировка будет снята неявно при закрытии привязанной формы, либо при завершении сеанса пользователя, либо явно при вызове метода РазблокироватьДанныеДляРедактирования()

В модели разработки прикладных решений 1С:Предприятия для ряда сущностей предметной области используется объектный подход манипулирования данными.

Эти сущности описываются в конфигурации объектами метаданных:

    ; ;
  • ПланВидовХарактеристик;
  • ПланСчетов;
  • ПланВидовРасчета.

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

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

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

  1. запись основной таблицы;
  2. записи табличных частей.

Объект базы данных 1С

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

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

Тип СправочникиМенеджер

Тип СправочникиМенеджер предназначен в основном для доступа к менеджерам конкретных справочников. Кроме того, он имеет метод ТипВсеСсылки (), который позволяет получить значение ОписаниеТипов , содержащее типы ссылок всех справочников конфигурации. Например, с помощью данного значения (используя метод СодержитТип ()) можно проверить, является ли тип некоторого значениям типом ссылки какого-либо справочника.

Тип СправочникМенеджер

Тип СправочникМенеджер предоставляет доступ к общим действиям, относящимся к конкретному справочнику . С помощью его методов выполняются действия, относящиеся к справочнику, а не к его конкретным объектам, например:

  • создать новый объект справочника;
  • найти объект справочника по коду, и т.д.

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

Объекты типа СправочникиМенеджер и СправочникМенеджер имеются в системе в единственном экземпляре.

Тип СправочникСсылка

Объект базы данных 1С

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

Значение типа СправочникСсылка – хранит ссылку, идентифицирующую объект в базе данных 1С.

Фактически значение СправочникСсылка хранит только внутренний идентификатор, хранящийся в поле Ссылка таблицы справочника. Это значение:

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

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

Тип СправочникОбъект

Значение типа СправочникОбъект используется (в основном):

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

Для одного и того же элемента справочника можно получить несколько объектов типа СправочникОбъект:

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

СправочникОбъект оптимизирует запись изменений в базу данных, например:

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

Т.о. для манипулирования справочником во встроенном языке существуют два основных типа СправочникСсылка.ХХХХ и СправочникОбъект.ХХХХ , где ХХХХ — имя справочника в метаданных.

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

Отличие типов СправочникСсылка и СправочникОбъект:

  • значение типа СправочникСсылка хранит ссылку, идентифицирующую объект в базе данных;
  • значение типа СправочникОбъект позволяет считывать и записывать данные объекта.

И СправочникСсылка, и СправочникОбъект предоставляют доступ через свойства к данным объекта - значениям полей таблицы. Однако это происходит совершенно по-разному, так как назначение и использование этих типов принципиально отличается:

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

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

Данные объекта удерживаются в кэше около 20 минут , но после интервала в 20 секунд при очередном обращении будет выполняться проверка того, что объект в базе данных не менялся, и, при необходимости, выполняется обновление данных в кэше. Если объект записывается в данной сессии, то он сразу обновляется в кэше. Также имеются ограничения на количество объектов хранимых в кэше. Следует заметить, что в рамках транзакции система использует отдельный кэш, поэтому обращение к данным объекта через ссылки в транзакциях гарантированно выдает актуальные данные.

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

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

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

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

Тип СправочникВыборка

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

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

Тип СправочникСписок

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

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

Рисунок отсюда , там же можно почитать подробнее.

Взаимосвязь объектов 1С

На схеме показаны не все возможные объекты и взаимосвязи. Например, метод Скопировать () существует не только у объекта СправочникСсылка, но и у самого объекта СправочникОбъект. Кроме того, у объекта СправочникМенеджер есть методы НайтиПоНаименованию () и НайтиПоРеквизиту (), которые действуют аналогично методу НайтиПоКоду и возвращают ссылку на найденный элемент или пустую ссылку, если элемент не найден. Также на схемах не показаны специфические объекты и объекты типа "Список".

Взаимосвязь регистров в 1С

Свойства и методы прикладных объектов

Менеджер прикладных объектов данного типа

  • СправочникиМенеджер
  • ДокументыМенеджер
  • КонстантыМенеджер
  • РегистрыНакопленияМенеджер
  • ОтчетыМенеджер
  • ОбработкиМенеджер

Объекты данного вида обеспечивают доступ к менеджерам конкретного прикладного объекта.

Обычно доступ к таким объектам производится через свойства глобального контекста, например, Справочники.Сотрудники, Документы.Счет, РегистрыСведений.КурсыВалют и т.д.

Эти объекты являются коллекциями значений и позволяют перебрать свои элементы с помощью цикла "Для Каждого".

Менеджер прикладного объекта

  • СправочникМенеджер
  • ДокументМенеджер
  • КонстантаМенеджер
  • РегистрНакопленияМенеджер
  • ОтчетМенеджер
  • ОбработкаМенеджер

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

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

Типичные свойства (для справочников и планов):

  • Выбрать()
  • НайтиПоКоду()
  • НайтиПоРеквизиту()
  • ПустаяСсылка()
  • СоздатьЭлемент()
  • СоздатьНаборЗаписей()
  • ПолучитьМакет()
  • ПолучитьФорму()
  • СправочникСсылка
  • ДокументСсылка
  • ПланСчетовСсылка
  • ПланВидовРасчетаСсылка

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

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

Заметьте, что у записей регистров нет ссылок.

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

  • <реквизит>
  • <табличная часть>
  • ПометкаУдаления
  • Дата
  • Предопределенный
  • Ссылка
  • Пустая()
  • ПолучитьОбъект()
  • ПолучитьФорму()
  • Метаданные()
  • Скопировать()
  • СправочникВыборка
  • ДокументВыборка
  • ЖурналДокументовВыборка
  • РегистрНакопленияВыборка

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

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

Свойства аналогичны свойствам объекта типа "Ссылка".

  • СправочникОбъект
  • ДокументОбъект
  • ПланСчетовОбъект
  • ОтчетОбъект
  • ОбработкаОбъект

Предоставляет доступ к элементу с возможностью записи изменений в базу данных. Этот объект содержит методы, влияющие на элемент в базе данных, например, методы Записать и Удалить.

Для отчетов и обработок через этот объект обычно осуществляется формирование отчета или выполнение обработки.

Если в модуле прикладного объекта (не путать с модулем формы) есть экспортируемые переменные модуля или процедуры/функции, то они дополняют набор свойств и методов именно этого программного объекта.

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

Свойства аналогичны свойствам объекта типа "Ссылка".

  • Записать()
  • Удалить()
  • Заблокировать()
  • Разблокировать()
  • Заблокирован()
  • Скопировать()
  • ПолучитьФорму()
  • ПолучитьМакет()
  • Метаданные()
  • СправочникСписок
  • ДокументСписок
  • ЖурналДокументовСписок
  • ПланСчетовСписок
  • РегистрНакопленияСписок
  • КритерийОтбораСписок

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

Этот объект нельзя создать программно, он создается системой автоматически при размещении на форме табличного поля. Конечно, программно можно создать табличное поле в экранной форме и тогда будет создан объект данного типа.

Набор записей

  • РегистрСведенийНаборЗаписей
  • РегистрНакопленияНаборЗаписей
  • РегистрБухгалтерииНаборЗаписей
  • РегистрРасчетаНаборЗаписей
  • ПоследовательностьНаборЗаписей

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

У документов есть свойство-коллекция "Движения", которое предоставляет доступ к наборам записей по каждому регистру, отмеченному на закладке "Движения". Через это свойство обычно производится формирование движений документа при его проведении.

  • Добавить()
  • Удалить()
  • Очистить()
  • Записать()
  • Прочитать()
  • Количество()
  • Выгрузить()
  • Загрузить()
  • РегистрСведенийЗапись
  • РегистрНакопленияЗапись
  • РегистрБухгалтерииЗапись
  • РегистрРасчетаЗапись

Обеспечивает доступ к одной записи из набора, для того чтобы установить ее измерения, ресурсы и т.д. Этот объект возвращается методами других объектов, например, методом Добавить у объекта типа РегистрНакопленияНаборЗаписей.

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

  • <измерение>
  • <реквизит>
  • <ресурс>
  • Активность
  • Период
  • Регистратор
  • НомерСтроки
  • ВидДвижения

Ключ записи

  • РегистрСведенийКлючЗаписи
  • РегистрНакопленияКлючЗаписи
  • РегистрБухгалтерииКлючЗаписи
  • РегистрРасчетаКлючЗаписи

Типичные свойства (кроме регистра сведений):

Свойства для регистра сведений:

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

Для отправки комментария вам необходимо авторизоваться.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Ниже я распишу, как работают блокировки, и каких типов они бывают.

Типы блокировок 1С

Типы блокировок

Блокировки в 1С делятся условно на объектные и транзакционные.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

Данный вид блокировок полностью реализован на уровне платформы 1С и никак не затрагивает СУБД.

Пессимистические блокировки

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

Оптимистические блокировки

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

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

Механизм тразакционных блокировок 1С гораздо интереснее и более функционален, чем механизм объектных блокировок. В этом механизме активно участвуют блокировки на уровне СУБД.

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

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

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

Автоматические транзакционные блокировки 1С и СУБД

Для разных СУБД в автоматическом режиме используются разные степени изоляции:

  • SERIALIZABLE на всю таблицу – файловый режим 1С, PostgreSQL, Oracle;
  • SERIALIZABLE на записи – MS SQL, IBM DB2 при работе с не объектными сущностями;
  • REPEATABLE READ на записи – MS SQL, IBM DB2 при работе с объектными сущностями.

Управляемые режим транзакционных блокировок 1С и СУБД

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

Две блокировки НЕ совместимы, если: установлены разными пользователями, имеют несовместимые виды (исключительная/разделяемая) и установлены на один и тот же ресурс.

Физическая реализация блокировок в СУБД

Физически блокировки представляют собой таблицу, которая находится в БД под названием master. Сама таблица блокировок носит имя syslockinfo.

Таблица условно имеет четыре поля:

Для завершения транзакции на уровне SQL можно использовать команду KILL с указанием идентификатора сессии:

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

Читайте также: