Имя: Пароль:
1C
1С v8
v8: Перевод документов на управляемые блокировки
0 RafaelRS
 
12.09.12
16:02
В продолжение темы так сказать: v8: Помогите перевести документ на "Управляемые блокировки"

Поскольку перехожу на PostgreSQL, как никогда актуальна стала тема "Управляемых блокировок"

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

// begin - RafaelRS mod - управляемые блокировки в регистрах
Процедура УстановитьБлокировкуПоРегистратору(слкРегистратор) Экспорт
   
   БлокировкаДанных = Новый БлокировкаДанных;
   
   Для Каждого мтдРегистрДвижения Из слкРегистратор.Метаданные().Движения Цикл
       
       ЭлементБлокировки = БлокировкаДанных.Добавить(мтдРегистрДвижения.ПолноеИмя() + ".НаборЗаписей");
       ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
       ЭлементБлокировки.УстановитьЗначение("Регистратор", слкРегистратор);
       
   КонецЦикла;
   
   БлокировкаДанных.Заблокировать();
   
КонецПроцедуры

Процедура УстановитьБлокировкуПоРегистраторуПриПроведении(Источник, Отказ, РежимПроведения) Экспорт
   УстановитьБлокировкуПоРегистратору(Источник.Ссылка);
КонецПроцедуры

Процедура УстановитьБлокировкуПоРегистраторуПриУдаленииДвижений(Источник, Отказ) Экспорт
   УстановитьБлокировкуПоРегистратору(Источник.Ссылка);
КонецПроцедуры
// end - RafaelRS mod - управляемые блокировки в регистрах

Ну и так же создал две подписки на событие:
ПриПроведенииУправляемыеБлокировки
Источник: ДокументОбъект; Событие: ОбработкаПроведения
ПриУдаленииПроведенияУправляемыеБлокировки
Источник: ДокументОбъект; Событие: ОбработкаУдаленияПроведения

которые вызывают вышеупомянутые процедуры.
1 neckto
 
12.09.12
16:13
Объясни, зачем нужна управляемая блокировка на регистры, по которым не требуется контроль остатков?
2 ptiz
 
12.09.12
16:15
(0) Может удалить весь этот код, ничего не изменится.
3 RafaelRS
 
12.09.12
16:23
(2) Изменится - я не смогу проводить одновременно два документа которые двигают этот регистр

(1) Ребят, да вы походу ни разу не разворачивали базу на PostgeSQL. Там, если кто то двигает регистр, все остальные тупо ждут его, и не могу провести ничего, что пишет в этот регистр.
4 Reset
 
12.09.12
16:34
(3) Ты не путаешь? Блокировки накладываются для того, что бы запретить что-то, а не наоборот.
+ к (1),(2)

Код в (0) бесполезен
5 Лефмихалыч
 
12.09.12
16:36
(4) управляемые блокировки накладываются, чтобы добиться параллельности
6 neckto
 
12.09.12
16:37
(3) Если ты имеешь ввиду, что при включении режима блокировок в Автоматический режим для Postgree происходит блокировка всей таблицы, то это так. Вопрос в (1) еще актуален
7 Reset
 
12.09.12
16:41
(5) Т.е. без блокировок (совсем, каждый делает что хочет) параллельности нет, наложили - поперла параллельность? С точностью наоборот. После наложения что-то становится нельзя сделать. Просто в (4) фраза настолько капитанствующая, что, видимо, ты ее неправльно понял.
8 Reset
 
12.09.12
16:42
(5) Скажем так, накладываются, чтобы при параллельности сохранить согласованность данных
9 neckto
 
12.09.12
16:43
(8) Какая согласованность данных на уровне координатора транзакций 1С нужна, если по регистру не требуется получать остатки?
10 Reset
 
12.09.12
16:44
(9) Я же не ТС, я не отвечу тебе.
11 neckto
 
12.09.12
16:45
Но в (8) ответил
12 Reset
 
12.09.12
16:46
(11) Не понимаю, о чем ты
13 Шабалин Валентин
 
12.09.12
16:46
(0) В PostgreSQL блокировки управляемые тебе выигрыша не дадут, т.к. особенность работы 1С с PostgreSQL в том, что она блокирует таблицу целиком.
14 Лефмихалыч
 
12.09.12
16:46
(7),(8) ай, не телепи мое айпи
15 Шабалин Валентин
 
12.09.12
16:46
+(13) и па сути PostgreSQL будет тупо игнорировать твои поползновения на блокировку набора записей
16 Reset
 
12.09.12
16:47
(13) Поперли "знатоки" ёма.
Ухожу из темы
17 neckto
 
12.09.12
16:47
Как бы не так. В автоматическом режиме - блокировки таблиц. В управляемом режиме - блокировка записей
18 Шабалин Валентин
 
12.09.12
16:49
(17) PostgreSQL может блокировать записи в таблицах, но 1С это не поддерживает :(((
19 Reset
 
12.09.12
16:49
+(11) Я тебе кстати наоборот плюсанул в (4)
20 Maxus43
 
12.09.12
16:50
(18) всю жизнь поддерживала а сейчас нет? шо за ересь?
21 neckto
 
12.09.12
16:54
(19) угу, в (8) показалось, что ты в скобках 6 написал. Отвлекают меня от мисты (((
22 RafaelRS
 
12.09.12
16:59
(9) Честно говоря не понимаю твоего вопроса. Остатки да, получать не нужно, но ведь я блокирую все регистры, в которые документ пишет. Ибо если другой документ будет пытаться писать в эти регистры, без этого кода он не сможет это сделать, или я ошибаюсь?

(15) Ничего не игнорируется, код испытанный и работает. Без этого кода можно провести только один документ одновременно, с этим хоть два, хоть три и т.д.
23 neckto
 
12.09.12
17:08
То есть ты хочешь сказать, что если у конфиги, документа и регистра стоит управляемый режим, то происходит блокировка на уровне таблиц? 1С заявляет, что блокировка на уровне записей. У тебя платформа последняя?
24 Шабалин Валентин
 
12.09.12
17:08
(22) ну значит 1С допилила свою платформу.
На 8.1 блокировалась таблица целиком.
25 neckto
 
12.09.12
17:10
(24) Функционал заявлен еще в 8.1
26 RafaelRS
 
12.09.12
17:10
(23) Я управляемый режим поставил только у конфиги. Насколько знаю параметры документа и регистра в этом случае игнорируются. Или нет?

Платформа 8.2.16.352
27 ptiz
 
12.09.12
17:11
(22) Чудеса какие-то. Надо будет проверить, раз так утверждаешь.
28 ptiz
 
12.09.12
17:12
(26) Ну естественно! Более того, твой код (0) тоже игнорируется.
29 RafaelRS
 
12.09.12
17:12
(24) В 8.1 тоже все работало на уровне записей, с соответствующими дописками. По крайне мере Гилев об этом писал: http://www.gilev.ru/1c/81/postgresql/
30 RafaelRS
 
12.09.12
17:12
(28) Еще раз повторюсь - код не игнорируется, т.к. с ним работает, без него нет, щас испытаю ваше кунгфу :))))
31 Reset
 
12.09.12
17:13
(24) Все прекрасно работало еще на 8.1 и postrge 8.3.3, не обманывай
32 neckto
 
12.09.12
17:13
(26) Да, попробуй поиграться параметрами у объектов
33 neckto
 
12.09.12
17:15
Мало ли косяк платформы
34 Reset
 
12.09.12
17:15
(26) Управляемый - игнорируются, используется управляемый режим. АвтоматическийИУправляеый - используется проставленный в объектах
35 john_ddd
 
12.09.12
17:40
Тут все понятно
http://infostart.ru/public/144750/
36 RafaelRS
 
12.09.12
17:58
(35) Конечно спасибо, но речь тут у нас не об этом, а об особенностях работы с PostgreSQL. А так насчет управляемых блокировок тоже подкинул бы неплохую статью http://1cexpo.ru/informacziya/27-blokirovki-dannyx-v-1spredpriyatii-8.html

(32) Хммм, переключил, и правда заработало. Может дело в том, что конфа в режиме совместимости с 8.1. Щас поиграюсь еще и по переключаю
37 RafaelRS
 
12.09.12
19:59
Короче тогда я не пойму, почему на многих форумах говорят, что для Постгре придется переписать конфигурацию, чтобы работало с блокировкой на уровне записей.
38 pavig
 
12.09.12
22:12
перевод режима записи в режим упр блокировок предусматривает собой установку блокировок программистом тольок в нужных ему местах (читай - в местах, в которых необходим контроль остатков)
39 pavig
 
12.09.12
22:16
(26) я тоже так думаю, и описано это где-то на ИТС:
- если у конфиги Упр режим, то ВСЕ транзакции будут выполняться в режиме упр блокировок
- если режим "упр и авто" то начинаемая транзакция будет ориентироваться на свойство объекта, с которого она начинается (в твоем случае документ)
- если авто, то везде авто
40 pavig
 
12.09.12
22:19
(37) прописать - значит проставить упр блокировки для контроля остатков во избежание изменения остатков после их чтения но до момента завершения записи в БД
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.