Имя: Пароль:
1C
1С v8
Проверка работы управляемых блокировок
,
0 Alex1979rak
 
14.11.11
09:59
Платформа 8.2.14.540. Файловый режим работы.
Разрабатываю конфигурацию.  Режим блокировок конфигурации - управляемый. Хочу проверить работу управляемых блокировок.
Изучил информацию с ИТСа.
Хочу заблокировать документ ПриходнаяНакладная.

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

В модуле формы обработки делаю так:
&НаКлиенте
Процедура Команда1(Команда)
   
   ПроверкаБлокировки();
   
КонецПроцедуры

&НаСервере
Процедура ПроверкаБлокировки()

   НачатьТранзакцию();
   
   Блокировка = Новый БлокировкаДанных;
   
   Элемент = Блокировка.Добавить("Документ.ПриходнаяНакладная");
   
   Элемент.Режим = РежимБлокировкиДанных.Исключительный;
   
   Элемент.УстановитьЗначение("Ссылка", Документы.ПриходнаяНакладная.НайтиПоНомеру("000000001"));
   
   Блокировка.Заблокировать();
   
КонецПроцедуры

И после выполнения нажатия на кнопку пытаюсь открыть документ. Он открывается.
Вопрос: я что-то делаю не так?
1 ArtKzn
 
14.11.11
10:05
Транзакцию начал, а фиксировать ето будет?
2 Alex1979rak
 
14.11.11
10:10
Хорошо. В конце процедуры поставил ЗафиксироватьТранзакцию(). Повторил запуск обработки. Результат тот же. Опять что-то не так?
3 aleks-id
 
14.11.11
10:12
Документы.ПриходнаяНакладная.НайтиПоНомеру("000000001") что возвращает?
4 Alex1979rak
 
14.11.11
10:15
(3) Возвращает ДокументСсылка.ПриходнаяНакладная. Как и просил.
5 dimaldinho
 
14.11.11
10:18
(0) >> И после выполнения нажатия на кнопку
там точку останова ставишь перед зафиксировать транзкцию?
6 Alex1979rak
 
14.11.11
10:20
(5) Если я там поставлю точку останова, то как я смогу проверить читается документ после блокировки или нет?
7 Grimnir
 
14.11.11
10:20
Идет путаница двух механизмов: объектной и транзакционной блокировки.
Тебе нужно:
Ссылка=Документы.ПриходнаяНакладная.НайтиПоНомеру("000000001");
Ссылка.ПолучитьОбъект.Заблокировать();

Тут управляемые блокировки в принципе не нужны.
8 aleks-id
 
14.11.11
10:21
(4) я не о том.
ИсточникДанных (DataSource)
Использование:

Чтение и запись.
Описание:

Тип: РезультатЗапроса; Табличная часть; ТаблицаЗначений; набор записей. Источник данных, содержащий значения полей для установки условий на поля пространства блокировки.
9 aleks-id
 
14.11.11
10:22
Пример:

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1"));
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад");
Блокировка.Заблокировать();
10 Alex1979rak
 
14.11.11
10:30
(8) (9) Я кажется запутался совсем. По ИТСу сказано, что можно использовать метод УстановитьЗначение(), в котором указать имя поля и значение.
11 aleks-id
 
14.11.11
10:32
(10) Имя поля! вот ключевое слово. а ты ссылку на документ пихаешь
12 Alex1979rak
 
14.11.11
10:35
(11) УстановитьЗначение(<ПолеПространстваБлокировок>, <БлокируемоеЗначение>)

<ПолеПространстваБлокировок> (обязательный)

Тип: Строка.
Имя поля пространства блокировки. Поддерживаются следующие имена полей:
Для пространства Документ.<имя> - Ссылка

<БлокируемоеЗначение> (обязательный)

Тип: Произвольный; Диапазон.
Значение (диапазон значений) для поля пространства блокировки.

Вот я из чего исходил. Ссылка - это параметр.
13 Alex1979rak
 
14.11.11
10:43
пробую поднять
14 0xFFFFFF
 
14.11.11
10:46
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый) - нет?
15 Господин ПЖ
 
14.11.11
10:47
>Файловый режим работы.

дальше вообще есть смысл сношаться??
16 ptiz
 
14.11.11
10:50
"И после выполнения нажатия на кнопку пытаюсь открыть документ. Он открывается.
Вопрос: я что-то делаю не так?"

А ты записать попробуй.
17 Alex1979rak
 
14.11.11
10:50
(15) Изучаю сам механизм.
18 Alex1979rak
 
14.11.11
10:50
(16) пробовал. Работает.
19 ptiz
 
14.11.11
10:52
(18) Ставишь точку останова после Блокировка.Заблокировать();
И ДРУГИМ сеансом пробуешь что-то делать с этим документом.
20 Господин ПЖ
 
14.11.11
10:52
(17) табличка из http://v8.1c.ru/overview/datalockcontrol.htm ни о чем не намекает?
21 Reset
 
14.11.11
10:57
(18)
//В одном сеансе
Ссылка=Документы.ПриходнаяНакладная.НайтиПоНомеру("000000001");
Объект=Ссылка.ПолучитьОбъект();
Объект.Заблокировать();
Предупреждение("Пауза");

//В другом сеансе.
Открываешь документ - откроется. Попытаешься записать - Не получится.
Если необходимо, чтоб и не открылся (что бред, на мой взгляд), в ПередОткрытием пишешь:
Попытка Заблокировать(); Исключение Отказ=Истина; КонецПопытки;


Управляемые блокировки тут не при чем.
22 Alex1979rak
 
14.11.11
11:03
Разобрался. Всем спасибо.