Имя: Пароль:
1C
1С v8
А это правда, что ПодпискаНаСобытие....8.2
,
0 ВалераОшкин
 
21.02.13
22:36
1. Это не правда 80% (4)
2. Возникает автоблокировка 20% (1)
3. Свое мнение 0% (0)
Всего мнений: 5

А это правда, что в 8.2 ПодпискаНаСобытиеЗаписиДокумента вызывает транзакцию в режиме автоматической блокировки таблиц, не смотря на то, что конфигурация находится в управляемом режиме блокировок?

P.S. Мне недавно на одной авторитетной встрече так сказали.

Может кто пояснить эту ситуацию?
78 ВалераОшкин
 
22.02.13
10:18
(75) Дорогой, я просто хочу навести тебя на мысль и получить ответы:
- а нафига мне знать про "Serializable или  Repeatable Read" если транзакция в автоматическом режиме?
- как это знание мне поможет в 1С в этом режиме блокировок?
79 saaken
 
22.02.13
10:19
(74) без СУБД разговор не имеет смысла
80 MrStomak
 
22.02.13
10:20
(78) Да можно вообще ничего не знать - это твоё дело. Просто потом когда тебя спрашивают "что такое автоматический режим?" не надо нести ахинею про "это когда все таблицы блокируются всегда", говори тогда - я с СУБД не знаком, поэтому для меня, как для программиста, это режим, когда мне управляемые блокировки ставить не нужно - система сама обеспечивает целостность данных. Как она это делает мне неинтересно.
81 ВалераОшкин
 
22.02.13
10:21
(80) нафига засирять себе мозг ненужными в ситуации (78) вещами?
82 MrStomak
 
22.02.13
10:22
(81) Когда пишешь масштабируемые решения это необходимо. Например, в автоматическом режиме иногда нужно ставить "Для изменения" в запросе, чтобы повысить уровень блокировки до экслюзивного, чтобы не было взаимоблокировки. Чтобы понимать, зачем это нужно, надо понимать работу 1с на уровне изоляции транзакций в автоматическом режиме.
83 MrStomak
 
22.02.13
10:24
(81) "Для изменения" это вообще явная установка исключительной блокировки, по сути даже в автоматическом режиме блокировками управлять приходится, иначе остатки контролировать не сможешь.
84 saaken
 
22.02.13
10:24
(80) на разных данных одна и та же база работает по разному
85 ВалераОшкин
 
22.02.13
10:26
(82) "Для Изменения" в автоблокировках используется как раз в том случае, если ты хочешь железобетонно заблокировать таблицу в режиме Serializable
86 MrStomak
 
22.02.13
10:26
(84) Это очень общая фраза, с которой невозможно спорить и которая не несет смысла.
87 MrStomak
 
22.02.13
10:27
(85) Блокировка накладывается исключительная или разделяемая, а не "Serializable"
88 ВалераОшкин
 
22.02.13
10:27
+(85) вернее, записи таблицы, попавшие в запрос
89 MrStomak
 
22.02.13
10:28
(85) И не всю таблицу, а записи, если СУБД так решит.
90 ВалераОшкин
 
22.02.13
10:28
(87) да, Serializable и прочие аглицкие термины, отдельно от СУБД к 1С не применимы
91 ВалераОшкин
 
22.02.13
10:28
(89) ---> (88)
92 MrStomak
 
22.02.13
10:28
(88) А иногда - и всю таблицу, если СУБД решит что ресурсов для блокировки записей тратиться слишком много.
93 ВалераОшкин
 
22.02.13
10:29
(92) ты когда разрабатываешь в 1С, каждый раз думаешь, что происходит в SQL?
94 MrStomak
 
22.02.13
10:29
(90) Ты путаешь режим блокировки и уровень изоляций, ну как с тобой о чем-то спорить?
95 MrStomak
 
22.02.13
10:29
(92) Ты не поверишь - да.
96 ВалераОшкин
 
22.02.13
10:30
(94) ты со своим уровнем изоляций пытаешься затроллить меня на разговор о СУБД и уйти от платформы 1С
97 ВалераОшкин
 
22.02.13
10:30
(95) от у тебя мозг наверно пухнет...
98 MrStomak
 
22.02.13
10:31
(90) Ты путаешь уровень изоляции транзакций и режим блокировки. Это как бы очень демонстрирует знание вопроса.
99 MrStomak
 
22.02.13
10:32
(96) Ты изначально начал говорить о СУБД, как только написал в топике про блокировки. Блокировки - это всегда связано с СУБД, не зная работы СУБД можно даже не соваться в блокировки.
100 ВалераОшкин
 
22.02.13
10:32
(98) каким образом платформа 1С относится к понятию "уровень изоляции транзакции", если этим управляет не платформа, а СУБД?
101 MrStomak
 
22.02.13
10:33
(96) Тем более, автоматический режим блокировок - это вообще абсолютно не связанная с 1С вещь, реализуемая именно СУБД, а не платформой, за исключением "Для изменения"
102 MrStomak
 
22.02.13
10:36
(100) 1С инициирует транзакции для операций с базой. На 1С лежат задачи обеспечения логической целостности данных - смотри классическую задачу про контроль остатков. На 1С, как работающем с СУБД приложением, лежит задача обхода взаимоблокировок - делать захват ресурсов в одном порядке, накладывать максимальную блокировку сразу, а не повышать её уровень. Иначе 1С не сможет обеспечить корректную работу сотен пользователей. Это нужно знать программисту.
103 ВалераОшкин
 
22.02.13
10:38
(102) Насколько я знаю, в 1С свой менеджер блокировок, который никоим образом не относится к управлению уровнями изоляции транзакций в СУБД.

Или ты опять скажешь, что я не прав?
104 Fragster
 
гуру
22.02.13
10:42
(103) ага
105 MrStomak
 
22.02.13
10:43
(102) Есть свой менеджер блокировок, да. И что? Он нужен для того, чтобы в тех случаях, когда СУБД блокировку не поставить, поставить её самостоятельно. СУБД не будет ставить блокировки при чтении таблиц в транзакции на уровне Read comitted, но будет на уровне Repeatable Read, значит, если из логики работы нашей базы следует, что блокировка там нужна, это нужно делать самостоятельно - через менеджер блокировок. Не учитывать изоляции транзакций нельзя, т.к. блокировки СУБД накладывает в любом случае, нужно понимать в каком случае какие блокировки она наложит, чтобы средствами 1С обойти взаимоблокировки и чтобы обеспечивать целостность данных.
106 ВалераОшкин
 
22.02.13
10:43
(104) тогда поясни, будь ласка :)
107 ВалераОшкин
 
22.02.13
10:44
(105) тогда при чем тут "Для изменения" и уровень изоляции транзакций в СУБД?
108 MrStomak
 
22.02.13
10:46
(107) "для изменения" - это средство обеспечить целостность данных и обойти взаимоблокировку путем повышения уровня блокировки, которую накладывает СУБД, средствами 1С
109 ВалераОшкин
 
22.02.13
10:46
(108) Думаешь, что если в запросе ты написал "Для изменения", то СУБД наложит другой уровень изоляции?
110 ВалераОшкин
 
22.02.13
10:48
+(109) ты можешь на этот вопрос ответить "Да" или "Нет"?
111 MrStomak
 
22.02.13
10:48
(109) Это ты так думаешь. На самом деле СУБД повысит уровень блокировки до исключительного.
112 ВалераОшкин
 
22.02.13
10:49
(111) ты уверен в том, что именно СУБД повысит уровень блокировки?
113 MrStomak
 
22.02.13
10:50
(112) В случае с "Для изменения" - да.
114 ВалераОшкин
 
22.02.13
10:50
(113) Т.е. ты утверждаешь, что встроенный в 1С менеджер блокировок влияет на уровни изоляции транзакций, которые выполняет СУБД?
115 MrStomak
 
22.02.13
10:51
(114) Ты продолжаешь обнажать своё невежество. Менеджер блокировок используется в управляемом режиме. "Для изменения" - автоматический режим.
116 ВалераОшкин
 
22.02.13
10:54
(115) Т.е. я пишу запрос и указываю в нем "Для изменения".
В СУБД возникает соответствующий уровень изоляции транзакций?

А может все по-другому?

Сервер приложения получает результат запроса от SQL и в результате запроса накладывает свои блокировки на записи?
117 MrStomak
 
22.02.13
10:54
(114) Ну и эта, на уровни изоляции транзакций не влияет и "Для изменения" - он влияет на уровень блокировки. Я тебе подскажу - их два: разделяемая и исключительная.
118 MrStomak
 
22.02.13
10:55
(116) Прекрати немедленно нести чушь про смену уровня изоляций от конструкции "Для изменения".
119 ВалераОшкин
 
22.02.13
10:55
+(116) Очень хочу, чтобы ты помог мне разобраться в моем невежестве. Особеннно вот в этом:

Сервер приложения получает результат запроса (в котором ДЛЯИЗМЕНЕНИЯ) от SQL и в результате запроса накладывает свои блокировки на записи или СУБД меняет уровень изоляций?
120 MrStomak
 
22.02.13
10:57
(119) Система транслирует Для изменения в "For update" на SQL, что вызовет на СУБД исключительную блокировку по записям.
121 ВалераОшкин
 
22.02.13
10:58
(118) Имхо, я пытаюсь тебя понять и осмыслить свою чушь.

Пля буду,
на курсах мне говорили, что режим изоляции транзакций СУБД никоим образом не относится к блокировкам, которые накладывает сама 1С в данных сервера приложений.
122 MrStomak
 
22.02.13
10:58
(119) Прекрати немедленно нести чушь про смену уровня изоляций от конструкции "Для изменения".
123 ВалераОшкин
 
22.02.13
10:58
(112) Немедленно ответь мне на все вопросы
124 MrStomak
 
22.02.13
10:59
(121) В управляемом режиме так и есть - блокировками управляем менеджер. При это блокировки на СУБД также присутствуют - любая запись делает блокировку на чтение.
125 MrStomak
 
22.02.13
11:00
(124) собственно, для изменения именно поэтому и не работает в управляемом режиме.
126 ВалераОшкин
 
22.02.13
11:00
(124) У нас разговор вообще-то шел про автоматический режим, а не про управляемый.

В свете управляемого режима, ДляИзменения тупо игнорируется платформой.
127 ВалераОшкин
 
22.02.13
11:02
(125) Т.е. ты хочешь сказать, что в автоматическом режиме, ДляИзменения передается напрямую в SQL и он, ориентируясь на это слово накладывает дополнительные блокировки?
128 MrStomak
 
22.02.13
11:02
(126) В 8.0 был автоматический режим. В 8.0 не было менеджера блокировок вообще. Про какое управление блокировками на стороне 1С в автоматическом режиме ты говоришь?
129 saaken
 
22.02.13
11:03
(126) не прав
130 MrStomak
 
22.02.13
11:03
(127) Ты еще 10 раз спроси меня одно и тоже. Да, так и есть.
131 ВалераОшкин
 
22.02.13
11:03
(130) ну ты сразу бы так ответил...
132 ВалераОшкин
 
22.02.13
11:05
(130) тогда я не понимаю, как вяжется между собой (126) и утверждение в (129)?
133 MrStomak
 
22.02.13
11:05
(131) Когда ты говоришь "Для изменения" заставляет менять уровень изоляций на СУБД - я не могу на такое ответить "Да"
134 ВалераОшкин
 
22.02.13
11:06
(133) Ну если "ДляИзменения" передается на прямую в SQL и SQL накладывает блокировки на записи, то это должно существовать и в управляемом режиме и не зависеть от менеджера блокировок платформы.

Что-то тут не вяжется... Можешь пояснить?
135 saaken
 
22.02.13
11:07
(134) блокировка накладывается, но действует не до конца транзакции, а снимается после выполнения запроса
136 ВалераОшкин
 
22.02.13
11:09
(135) Т.е. ДляИзменения работает и в управляемом режиме?

Почему у меня тогда в методичке запись, что применение "ДляИзменения" не несет в себе смысла в режиме управляемых блокировок?
137 saaken
 
22.02.13
11:10
(136) и даже вредна, блокирует то что не может удержать до момента записи
138 ВалераОшкин
 
22.02.13
11:14
(137) вона оно как.
Видать преподаватель не знал четко и отделался общей фразой, что "применение "ДляИзменения" не несет в себе смысла в режиме управляемых блокировок".

А я уже додумал, что оно игнорируется платформой.

Спасибо.
139 MrStomak
 
22.02.13
11:19
(138) Тебя вводят в заблуждение - конструкция "Для изменения" не влияет в управляемом режиме, как минимум на сторону СУБД она тупо не передается.
140 MrStomak
 
22.02.13
11:21
Запрос с "Для изменения" на стороне MS SQL 2008R2 в управляемом (1) и автоматическом (2) режимах:

SELECT
T1._IDRRef
FROM _Reference7 T1

SELECT
T1._IDRRef
FROM _Reference7 T1 WITH(REPEATABLEREAD, UPDLOCK)
141 ВалераОшкин
 
22.02.13
11:23
(140)
Спасибо.
Значит все-таки "Для изменения" игнорируется платформой в управляемом режиме и передается в SQL в автоматическом режиме.
142 ВалераОшкин
 
22.02.13
11:24
+(141) А то уже хотел лезть и ДляИзменения вычищать :)
143 8vC1
 
22.02.13
11:44
Подписка выполниться в транзакции. Если в транзакции не указывать про режим, то будет блокировка по умолчанию (автоматическая) не обращая внимание на то, что флажок в регистре стоит на управляемый режим.
144 8vC1
 
22.02.13
11:45
Описано косвено в ЖКК.
145 ВалераОшкин
 
22.02.13
11:49
(143) > Если в транзакции не указывать про режим, то будет блокировка по умолчанию (автоматическая)

Это неверное утверждение.
146 ВалераОшкин
 
22.02.13
11:51
+(145) Если ты записываешь документ, на котором "Управляемый режим", то транзакция начнется в управляемом режиме.
147 8vC1
 
22.02.13
11:52
(145) То есть ты создал пост, чтобы доказать сам себе что тебя не справедливо слили с собеседования ?
148 ВалераОшкин
 
22.02.13
11:56
(147) я создал этот пост для того, чтобы убедиться, что мои знания верны или узнать как правильно
149 8vC1
 
22.02.13
11:57
(146) Ты там пишешь БлокировкаДанных
РежимБлокировкиДанных.Разделяемый или РежимБлокировкиДанных.Эксклюзивный.
А подписка пихает твою транзакцию в свою внешнюю.
150 ВалераОшкин
 
22.02.13
11:58
(149) тогда проголосуй как правильно

Всю жизнь думал, что не подписка создает транзакцию....
151 ВалераОшкин
 
22.02.13
12:00
+(150) а событие начала записи документа
152 ВалераОшкин
 
22.02.13
12:01
(149) т.е. ты утверждаешь, что подписка на событие первична и она создает транзакцию?
153 8vC1
 
22.02.13
12:04
(148) Ну вот на первом месте "мои знания верны". Признай уже наконец поражение. Это спец вопрос на который 99 процентов 1Сников не ответит, потому как вряд ли им это когда нибудь в работе пригодится и смысл которого посадить коллегу в лужу, доказав что он не так крут как тот кто спрашивает :)
154 MrStomak
 
22.02.13
12:04
(143) Расскажи побольше про инициацию транзакций подписками и особенно про фразу "по умолчанию (автоматическая)".
155 MrStomak
 
22.02.13
12:06
(146) Свойство документа не влияет на режим блокировок, если для конфигурации установлен "Управляемый".
156 Borteg
 
22.02.13
12:06
мля не одного поста не понял, пошел читать)
157 8vC1
 
22.02.13
12:07
(152) я тебе скопипастил на 1 странице из документации по платформе. Подписка создает свою транзакцию, внутри которой твоя управляемая. А в итоге будет тот режим который у транзакции подписки.
158 MrStomak
 
22.02.13
12:09
(157) Какая подписка? Я так понимаю, речь про подписки типа "Перед записью"? Я проверял трассировкой - уровень read comitted во всех транзакциях.
159 MrStomak
 
22.02.13
12:11
(157) Подписки вида "призаписи" или "припроведении" вообще не могут транзакцию начинать, так как выполняются внутри транзакции записи документа, а, как было сказано выше, фактически поддержки вложенных транзакций в 1С нет, всё выполняется в первой транзакции.
160 8vC1
 
22.02.13
12:14
Или даже наоборот будет вложенной транзакция ПриЗаписи в твою управляемую блокировку, все равно общий эффект будет с тем режимом какой у транзакции подписки.
161 ВалераОшкин
 
22.02.13
12:16
(157) На курсах утвердали, что платформа 1С не поддерживает вложенность транзакций. Транзакция всегда ОДНА.

В коде можно писать много уровней вложенности транзакций, но это игнорируется платформой и транзакция всегда ОДНА.
162 MrStomak
 
22.02.13
12:17
(161) Не игнорируется, там есть счетчик и менеджер блокировок отслеживает уровни, но на СУБД это всегда 1 транзакция.
163 ВалераОшкин
 
22.02.13
12:18
(162) Запутался. Давай забудем про СУБД. В платформе транзакция ОДНА?
164 ВалераОшкин
 
22.02.13
12:21
(159) А ПередЗаписьюСобытиеПодписки может транзакцию начинать?
165 Reset
 
22.02.13
12:26
(163) Одна, одна.
У 8vС1 какая то cвоя 1С c внешними транзакциями
166 ВалераОшкин
 
22.02.13
12:26
(162)
НачатьТранзакцию()
//Изменение данных №1
     
       НачатьТранзакцию()
     //Изменение данных №2
     ОтменитьТранзакцию()
     ЗафиксироватьТранзакцию()

ЗафиксироватьТранзакцию()

Утверждаешь, что, изменение данных №2 откатится?
167 MrStomak
 
22.02.13
12:27
(163) В платформе нет. Там есть транзакция и есть счетчик, показывающий уровень вложенности. Но мы не может говорить о транзакции в отрыве от СУБД, потому что весь смысл транзакций в неделимости операций с данными, а это уже, как ты понимаешь, на стороне СУБД происходит. Так как на СУБД транзакция одна, то откатить она сможет тоже только её.
168 ВалераОшкин
 
22.02.13
12:27
(165) Спасибо :)
169 8vC1
 
22.02.13
12:27
Да написано, что вложенные транзакции не поддерживаются. Тода хз почему так.
Написано, что
в качестве источника в назначенный обработчик передается сам объект (набор записей) вызвавший событие;
то есть, как я понимаю он уже должен быть записан в базу.
170 MrStomak
 
22.02.13
12:28
(166) Rollback - это действие СУБД, не 1С.
171 ВалераОшкин
 
22.02.13
12:28
(167) Спасибо,пора составлять список людей, кому можно верить, а кому нет :)
172 MrStomak
 
22.02.13
12:29
(169) Объект и набор записей - это не записи в БД, это мутабельные значения, которые существуют только в приложении 1С.
173 sanja26
 
22.02.13
13:11
(172) ого, Леха, ну ты разошелся)
может и мне по роутеру объяснишь?
174 MrStomak
 
22.02.13
13:15
(173) Давай, я сегодня в боевом настрое!!:)
175 sanja26
 
22.02.13
13:17
269 105 673
тим вьюер 7
176 sanja26
 
22.02.13
13:18
2i52fa
177 8vC1
 
22.02.13
14:40
Ну если трассировка выдала read commited значит управляемый режим однозначно.