Тип: Строка, Неопределено. Содержит имя колонки источника данных.
Полное описание, параметры и ограничения
ПолеЭлементаБлокировкиДанных.КолонкаИсточникаДанных (DataLockItemField.DataSourceColumn)
ПолеЭлементаБлокировкиДанных (DataLockItemField)
КолонкаИсточникаДанных (DataSourceColumn)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: Строка, Неопределено.
Содержит имя колонки источника данных.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Неопределено, если значение блокировки задано свойством Значение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Подготовить точную блокировку собственного ключа, пока не устанавливая её
Создаём описание пространства учебного регистра, задаём ключ guide-book и читаем поля блокировки. Количество элементов описания не равно числу заблокированных строк.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственная пустая УчебнаяКонфигурацияСинтаксиса. Создайте независимый регистр сведений УчебныеРезервы, периодичность В пределах секунды, измерение КлючРезерва типа Строка длиной 50 и ресурс Количество типа Число. Записи регистра для уроков не нужны.
В собственной учебной конфигурации задайте Режим управления блокировкой данных=Управляемый. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; каждый код вставляйте в её тело отдельно.
Вызывайте из собственной учебной обработки вне уже открытой транзакции. Не проводите рабочие документы, не запускайте в КА2/УНФ/УТ и не меняйте их режим блокировок ради опыта.
Первый урок только создаёт описание. Остальные реально устанавливают краткую управляемую блокировку в собственной транзакции и затем отменяют её. Данные не записываются и не удаляются.
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запускайте отдельно, вне чужой транзакции";
КонецЕсли;
Схема = Метаданные.РегистрыСведений.Найти("УчебныеРезервы");
Если Схема = Неопределено Тогда
ВызватьИсключение "Создайте собственный учебный регистр УчебныеРезервы";
КонецЕсли;
Если Схема.Измерения.Найти("КлючРезерва") = Неопределено Тогда
ВызватьИсключение "Нет измерения КлючРезерва";
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.УчебныеРезервы");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.УстановитьЗначение("КлючРезерва", "guide-book");
Сообщить(Блокировка.Количество() = 1);
Сообщить(Блокировка.Получить(0).Режим = РежимБлокировкиДанных.Исключительный);
Сообщить("Область элемента: " + Элемент.Область);
Сообщить("Полей описания: " + Строка(Элемент.Поля.Количество()));
Для Индекс = 0 По Элемент.Поля.Количество() - 1 Цикл
Поле = Элемент.Поля.Получить(Индекс);
Сообщить("Поле пространства: " + Строка(Поле.Поле));
Сообщить("Значение: " + Строка(Поле.Значение));
Сообщить("Колонка источника задана: " + Строка(Поле.КолонкаИсточникаДанных <> Неопределено));
КонецЦикла;
Сообщить("Заблокировать не вызывался; описание ещё не является установленной блокировкой");Разбор по шагам
БлокировкаДанных — коллекция элементов разных пространств. Добавить возвращает элемент; здесь пространство задано полным именем собственного регистра.
Режим Исключительный задаётся явно. УстановитьЗначение получает имя измерения и собственный строковый ключ, не имя ресурса Количество.
Получить(0) безопасен для созданного здесь единственного элемента. Поля.Получить используется в пределах фактического количества, не с безусловным индексом 0.
Поля и три свойства ПолеЭлементаБлокировкиДанных только для чтения. Условие задаётся через УстановитьЗначение, не присваиванием Поле.Значение.
Область выводится как фактическое значение платформы: справка этого свойства неоднозначно описывает имя пространства и имена полей. Не выдаём текст этого свойства за проверенную физическую таблицу СУБД.
Как проверить результат
Две логические проверки дают Истина; среди фактических полей найдите КлючРезерва с guide-book.
Активная транзакция не создана и Заблокировать не вызывался. В регистре не появились записи.
Ожидаемый результат
Подготовлено ограниченное описание блокировки с читаемым паспортом полей.
На что обратить внимание
Новый БлокировкаДанных не блокирует данные сам по себе.
Если не ограничить нужные поля пространства, можно получить более широкую блокировку, чем ожидает автор. Не переносите описание без анализа в рабочую базу.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Задать два ключа блокировки из собственной таблицы
Создаём таблицу с колонкой Ключ, связываем её с измерением КлючРезерва и устанавливаем разделяемую блокировку в собственной транзакции.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственная пустая УчебнаяКонфигурацияСинтаксиса. Создайте независимый регистр сведений УчебныеРезервы, периодичность В пределах секунды, измерение КлючРезерва типа Строка длиной 50 и ресурс Количество типа Число. Записи регистра для уроков не нужны.
В собственной учебной конфигурации задайте Режим управления блокировкой данных=Управляемый. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; каждый код вставляйте в её тело отдельно.
Вызывайте из собственной учебной обработки вне уже открытой транзакции. Не проводите рабочие документы, не запускайте в КА2/УНФ/УТ и не меняйте их режим блокировок ради опыта.
Первый урок только создаёт описание. Остальные реально устанавливают краткую управляемую блокировку в собственной транзакции и затем отменяют её. Данные не записываются и не удаляются.
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запускайте отдельно, вне чужой транзакции";
КонецЕсли;
Схема = Метаданные.РегистрыСведений.Найти("УчебныеРезервы");
Если Схема = Неопределено Тогда
ВызватьИсключение "Создайте собственный учебный регистр УчебныеРезервы";
КонецЕсли;
Если Схема.Измерения.Найти("КлючРезерва") = Неопределено Тогда
ВызватьИсключение "Нет измерения КлючРезерва";
КонецЕсли;
Источник = Новый ТаблицаЗначений;
Источник.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка"));
СтрокаКниги = Источник.Добавить();
СтрокаКниги.Ключ = "guide-book";
СтрокаРучки = Источник.Добавить();
СтрокаРучки.Ключ = "guide-pen";
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.УчебныеРезервы");
Элемент.Режим = РежимБлокировкиДанных.Разделяемый;
Элемент.ИсточникДанных = Источник;
Элемент.ИспользоватьИзИсточникаДанных("КлючРезерва", "Ключ");
Сообщить(Элемент.ИсточникДанных.Количество() = 2);
Сообщить(Элемент.Режим = РежимБлокировкиДанных.Разделяемый);
Для Каждого Поле Из Элемент.Поля Цикл
Сообщить("Поле: " + Строка(Поле.Поле));
Сообщить("Колонка источника: " + Строка(Поле.КолонкаИсточникаДанных));
КонецЦикла;
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Попытка
Блокировка.Заблокировать();
Сообщить("Собственная управляемая блокировка установлена; данные не записывались");
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());Разбор по шагам
ТаблицаЗначений содержит две собственные строки, не результат запроса рабочих товаров. Тип колонки Строка согласован с измерением КлючРезерва учебного регистра.
ИсточникДанных — таблица. ИспользоватьИзИсточникаДанных связывает поле пространства КлючРезерва с колонкой источника Ключ; имена намеренно разные.
Поля коллекции показывают эту связь. Значение поля, заданного через источник, не следует выдавать за одну строку guide-book: источник содержит два ключа.
Разделяемый режим отличается от Исключительный по совместимости блокировок. Он не является правом доступа и сам по себе не разрешает запись данных.
Заблокировать выполняется в собственной короткой транзакции с отменой; доказательство конфликтов режимов требует отдельного опыта двумя сеансами.
Как проверить результат
Две предварительные Истина: источник содержит два ключа и выбран Разделяемый. Связь поля указывает КлючРезерва → Ключ.
При успешном завершении активной транзакции нет. Таблица осталась собственным источником, записи регистра не изменились.
Ожидаемый результат
Показан реальный источник условий, сопоставление разных имён колонок и другой режим блокировки.
На что обратить внимание
Пустой/неполный источник или пропущенное сопоставление может изменить область блокировки. Не подменяйте таблицу рабочим запросом без проверки.
Разделяемая блокировка не заменяет исключительную для конкурирующей операции записи по бизнес-контракту.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.