Для чего нужны блокировки

26.09.11

Разработка - Механизмы платформы 1С

Многие программисты "борются" с блокировками, но в попытках их "победить" не всегда задумываются "зачем они вообще нужны?" "а может от них совсем отказаться?" удивительно, но факт - от блокировок можно просто отказаться.  

Если прочитать методику перевода конфигурации на управляемые блокировки от 1С - можно там найти много всего интересного и пугающего. На самом деле всё просто: В свойствах конфигурации меняете режим блокировки данных - "Управляемый". Всё. Могу вас поздравить - вы только что перешли на управляемые блокировки.  На самом деле всё несколько сложнее - но не на много.

Для начала небольшой теоретический экскурс - зачем нужны блокировки: У кого есть доступ конечно можно прочитать здесь: http://kb.1c.ru/articleView.jsp?id=30 1С озаботились написать достаточно доступную статью про блокировки данных.  У кого же доступа нет в двух словах опишу для чего нужны блокировки:

Пример 1. Если после включения управляемых блокировок ничего не делать, и при этом начать параллельно проводить 2 документа (один из них ведь всё равно на долю секунды раньше), то получим приблизительно следующую картину:

Транзакция 1 Транзакция 2 Состояние остатков
Начало | 1 шт
| Начало 1 шт
| | 1 шт
Чтение остатков | 1 шт
| Чтение остатков 1 шт
| | 1 шт
Списание с остатков | 0 шт
| Списание остатков -1 шт
Завершение |  
  Завершение  

Что здесь не так? Контроль остатков дал сбой. 2-ой документ успел прочитать остатки раньше, чем 1-й успел их записать. При этом увидел, что на остатках 1 штука и спокойно списал их вслед за первым. Стоит оговориться, что по факту блокировки здесь всё-таки будут. 2 документа не смогут списать остатки одновременно, это необходимо для логической целостности БД, но для решения прикладной задачи в данном примере вряд ли полезно. 

Теперь постараемся исправить ситуацию - в коде проведения документа пропишем установку эксклюзивной управляемой блокировки непосредственно перед чтением остатков:

Транзакция 1 Транзакция 2 Состояние остатков
Начало | 1 шт
| Начало 1 шт
Блокировка | 1 шт
Чтение остатков | 1 шт
| Попытка блокировки 1 шт
| Ожидание на блокировке 1 шт
Списание с остатков Ожидание на блокировке 0 шт
| Ожидание на блокировке 0 шт
Завершение Ожидание на блокировке 0 шт
  Блокировка 0 шт
  Чтение остатков 0 шт
  | 0 шт
  Отказ 0 шт

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

Ну теперь, когда разобрались зачем блокировки нужны остаётся только установить управляемые блокировки там где это нужно: а именно -только там где производится контроль остатков. Если у вас в базе менеджер имеет право провести документ вне зависимости от того есть товар(деньги) на остатках или нет, зачем вам тогда блокировки? Можете их просто не устанавливать, или прописать и закомментировать до лучших времён. Если же у вас производится контроль остатков то как правило это 3-4 регистра, ну максимум 10-ок.  Контроль можно подвесить как в общие процедуры и функции, так и в модули набора записей РН. Код предельно простой, открываем синтаксис помошник - смотрим:

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

Собственно всё сразу понятно - блокируем "товары на складх", 1 измерение становим в явном виде, значения 2-х других возьмём из источника данных - ТЧ документа.

Те кто читал книжки по 8.2 наверное помнят о "Новой логике проведения" - когда контроль остатков производится после записи движений документа. Задвались вопросом зачем это? А вот эту же табличку перерисуем так что контоль остатков и блокировка будут после записи движений:

Транзакция 1 Транзакция 2 Состояние остатков
Начало | 1 шт
| Начало 1 шт
| | 1 шт
Списание с остатков | 0 шт
| Списание с остатков -1 шт
Блокировка | -1 шт
Чтение остатков Попытка блокировки -1 шт
| Ожидание на блокировке -1 шт
| Ожидание на блокировке -1 шт
Завершение Ожидание на блокировке -1 шт
  Блокировка -1 шт
  Чтение остатков -1 шт
  | -1 шт
  Отказ 0 шт

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

Зная для чего блокировки нужны можно действительно ими управлять исходя из бизнес задач которые вы решаете. СУБД разрабатываются исходя из предположения обеспечения максисальной защиты данных. В случае если вы, к примеру, осуществляете банковские транзакции блокировки должны быть везде и на максимальном уровне. Лучше заблокировать лишние записи, чем допустить противоречивость данных.

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

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

Так в автоматическом режиме у вас почти всегда будет уровень изоляции SERIALIZABLE, который будет накладывать X блокировки где нужно и где не нужно, что будет существенно портить вам жизнь

А в управляемом у вас будет READ COMMITED, который будет накладывать и тут же снимать S блокировку при чтении, и X только при записи. Самый хитрый уровень. Быстро накладываемая S блокировка как раз позволяет проверить не наложена  ли где на эти данные X блокировка, что и обеспечивает чтение только согласованных данных, как принято для данного уровня изоляции, а в случае если вы прочитали и выполнили действя, рекоммендованные в предыдущей статье, то не будет даже S блокировки при чтении, таким образом на уровне СУБД будет блокироваться только запись во время записи - что правильно и необходимо для сограсованности данных.

Как же вы поступите с управляемыми блокировками - только ваше решение. Но я бы рекоммендовал не торопиться их устанавливать. Я встречал компании в которых был автоматический режим блокировки, при этом слово "замучали блокировки" звучало даже из уст генерального директора, и при этом был отключен контроль отрицательных остатков....

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4511    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5287    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6408    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12087    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8818    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15983    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
94. hogik 443 06.10.11 02:07 Сейчас в теме
(93)
Меня уже боитесь спрашивать? ;-)
Там нет строк. :-)
А Вы думаете запросная СУБД делает иначе?
Табличку давайте!
Хватит людям зубы заговаривать.
97. comol 5051 06.10.11 15:13 Сейчас в теме
(94) hogik, Мне, я думаю, вас не о чем спрашивать.
Разве что что такое
запросная СУБД
:).
А про уменьшения клиент-серверного взаимодействия вы видимо не слышали...
95. hogik 443 06.10.11 03:25 Сейчас в теме
(93)
Олег.
Табличку лучше представить для одной строки документа и одной сессии. А "подвигать" её во времени относительно другой, аналогичной, таблички - думаю, не составит труда для читателей данной темы. Ага? Ждём-с...
144. red80 04.05.13 18:31 Сейчас в теме
(68) hogik, а зачем вам 1С? 1С покупают чтобы было "быстро, просто и дешево", а когда создают зоопарк из учетных систем для каждой ООО от 50 человек... Интересно во сколько это все обошлось? Диверсия ИМХО.
146. hogik 443 06.05.13 02:10 Сейчас в теме
(144)
Что означают буквы "1С" в Вашем тексте?
147. red80 06.05.13 02:18 Сейчас в теме
(146) hogik, Понятно, не напрягайтесь.
148. hogik 443 06.05.13 02:45 Сейчас в теме
(147)
Т.е. Вы не способны ответить на простой вопрос?
Или не способны прочесть (68) сообщение?
Там написано: "Началось всё в 2000 году...".
Вы в курсе, что тогда еще не было "восьмерки"? :-)
Или Вы считаете, что на "семерке" (без её доработки) можно иметь нечто большее чем примитивную однопользовательскую учетную систему бумажных документов?
149. red80 06.05.13 13:04 Сейчас в теме
(148) hogik, Конечно, 7.7 "примитивная однопользовательская" и то что она заработала с 30 пользователями - ваша личная заслуга.
Если вы так хорошо доработали файловый вариант под 30 пользователей, зачем понадобился SQL?
Если все завершилось установкой SQL, зачем надо было изобретать велосипед и убивать время на доработку файловой версии?
151. hogik 443 06.05.13 16:31 Сейчас в теме
(149)
"все завершилось установкой SQL"(с)
А почему Вы сделали такой вывод?
Т.е. Вы считаете, что "клиент-серверную СУБД"="SQL" ?
Это "типичное" заблуждение, подпитываемое жадными дядями - изготовителями "запросных", реляционных СУБД. :-)
http://infostart.ru/public/15211/
http://infostart.ru/public/14664/
155. ZLENKO 398 08.10.13 15:36 Сейчас в теме
156. hogik 443 08.10.13 17:53 Сейчас в теме
(155)
См. ответ в (70) сообщении данной темы. :-)
64. comol 5051 04.10.11 16:24 Сейчас в теме
(62) _iAlex, Ну хоть кто-то понял о чём я...
77. WiseSnake 1519 05.10.11 01:34 Сейчас в теме
ИМХО не все так просто как описано в статье... На эту тему уже много написано на ихним языке и про ихние системы...
Если я правильно понял суть вопроса, то Вы блокируете только те регистры которые связаны с остатками... остальные объекты остаются без контроля... Тогда простой пример: 2 человека пишут один и тот же документ\справочник\и т.д. с разными данными, который не относится к остаткам...хм.. что в итоге получится я не представляю... нет никаких гарантий целостности данных.

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

Еще раз повторюсь, что не все так просто!!!

P.S. возможно маленькая вероятность возникновения конфликтных ситуаций в базе, но эта вероятность зависит от очень многих факторов. И нет никакой гарантии что она не возникнет в самый неподходящий момент.
82. comol 5051 05.10.11 11:15 Сейчас в теме
(77) WiseSnake,
1) Если 2 человека пишут один и тот же документ/справочник - существуют "объектные" блокировки на уровне платформы :), от которых ну никак не избавишься
2) Целостность данных поддерживается на уровне СУБД - естественно при записи данные блокируются, об этом уже писал выше в комментах - почитайте
3) Ну да, если хотите чтобы "-" не мог возникнуть то нужно ставить блокировку при чтении взаиморасчетов. Но это не огромная работа. Сколько вы ещё знаете таких примеров. В УТ 11 по-моему блокируются как раз только товары на складах и взаиморасчеты... и всё - 10 строчек кода :)
83. WiseSnake 1519 05.10.11 14:03 Сейчас в теме
(82)1,2. Это радует. Не прочитал, не работал просто с управляемыми блокировками...
3. Но проблема все равно не уходит:
Я знаю что надо контролировать: остатки, взаиморасчеты + контроль числа дней задолженности, остатки по партиям и еще много чего, лень вспоминать.
Все это надо обдумать как делать ведь, как я понимаю суть вашего примера в том что блокируется на чтение регистр до момента завершения записи этого регистра (а не до конца записи всех данных документа, иначе это была бы почти обычная блокировка как сечас), потом освобождается.
В этот момент и может произойти путаница: Пример(упрощенный чисто для примера конфликта):
1. Реализация1 блокировка остатков, контроль пройден успешно.Запись
2. Реализация2 блокировка остатков, контроль не пройден из за списания Реализации 1. Отмена проведения.
3. Реализация1 блокировка взаиморасчетов, контроль не пройден. Отмена проведения.
....
В этом примере Реализация 2 должна была быть проведена.
То есть надо блокировать до конца записи всего документа но это шило на мыло, или переделывать проведение документа, сначала двигать "важные" регистры и блочить до конца их записи.

P.S. ну в общем и целом это здоровая оптимизация, только ИМХО надо очень хорошенько все продумать, и поработать(все еще остаюсь при своем мнении что это большой труд)!
88. a-novoselov 1155 05.10.11 18:11 Сейчас в теме
(0) вобщем я попытался доказать доказать Владимиру что-то, но не смог. Больше пытаться не буду, он прав потому, что его закостенелое мышление не переломить :)
92. hogik 443 06.10.11 00:04 Сейчас в теме
(88)
Алексей (a-novoselov).
Вы не "попытались доказать"(с), а изложили НЕЧТО:
1) "блокировки только на чтение данных,"(с) - допускаю.
2) "прочитали - заблокировали - начали что-то писать."(с) - странно.
3) "другая транзакция не сможет прочитать те же данные"(с) - легко!!!
Для успешного выполнения утверждения #3, требуется в #2 сначала заблокировать, а потом читать. ;-)
96. a-novoselov 1155 06.10.11 07:57 Сейчас в теме
(92) В #3 согласен, что для успешного выполнения этого условия необходимо данные заблокировать. Но это условие вовсе не обязательное, если нет контроля остатков.
98. hogik 443 06.10.11 16:12 Сейчас в теме
(96)
"это условие вовсе не обязательное, если нет контроля остатков"(с)
Алексей (a-novoselov).
Контроль остатков (итогов) есть ВСЕГДА. А "проверка отрицательности" может и не быть. И весь вопрос ГДЕ, КАК, КТО, КОГДА, ПОЧЕМУ требуется, именно, КОНТРОЛЬ, а не ПРОВЕРКА.

(97)
"Мне, я думаю, вас не о чем спрашивать"(с)
Олег.
Вы напрасно тратите свое время и силы на доказательство моей глупости. Я уже признался, что я полный идиот и ничего не понимаю. Как начал разрабатывать ИС+СУБД в начале 70-х годов так ничего и нЭпонимаю... :-) А больше всего, я нЭпонимаю - за ЧТО мне, все эти годы, платят деньги. :-)
Табличку, то нарисуйте...
Ведь данную тему не только мы с Вами читаем!!!
Вы, вроде, статью написали, а не оправились в блоге?

По поводу "запросных" СУБД: http://ru.wikipedia.org/wiki/DML
P.S.
У меня к Вам предложение. ;-)
Давайте поменяем аннотации к Вашим статьям на, примерно, такой текст:
"Если Вы, случайно, купили "1С 8.х" вместо текстового редактора и ОНА мешает Вам работать своими блокировками. То Я сейчас Вас научу как ЕЁ превратить в текстовый редактор".
99. comol 5051 06.10.11 18:02 Сейчас в теме
(98) hogik, Да ещё и не за это платят деньги в некоторых организациях. Таблички у меня все адекватные. Приходится выбирать между доступностью понимания и методологической правильностью изложения.

По поводу "запросных" СУБД: http://ru.wikipedia.org/wiki/DML
Ну и где там понятие "Запросная СУБД", а какие из низ "Не запросные"? :))

"Если Вы, случайно, купили "1С 8.х" вместо текстового редактора и ОНА мешает Вам работать своими блокировками. То Я сейчас Вас научу как ЕЁ превратить в текстовый редактор".
Вынужден вас огорчить :)... текстовые редакторы, как и табличные со времён 70-х годов ушли далеко вперёд. И там тоже есть блокировки... и более того, они даже не табличные :) поэтому их будет больше чем в 1С в этом случае.
100. hogik 443 06.10.11 18:20 Сейчас в теме
(99)
Олег.
Я призываю Вас перестать доказывать мою глупость. Доказывайте, пожалуйста, свою "умность". Таблички у Вас Не"адекватные" и с ошибками. Еще раз - приведите табличку описанную в моём (89) сообщении. Мы с Вами занимаемся бла-бла уже две недели. Пора закругляться...
102. comol 5051 07.10.11 10:24 Сейчас в теме
(100) hogik,
Пора закругляться...
давно вас просил. И как воспитанный человек, комментирующий чужую статью вы давно должны были это сделать, тем более что ни один я уже вас об этом просил.
105. hogik 443 07.10.11 18:42 Сейчас в теме
(102)(103)
Олег.
1) "комментирующий чужую статью"(с)
Я не комментирую Вашу статью, а задаю вопросы автору. Содержательных ответов - не получаю. И вопросы задаю, не для ответов с Вашей стороны, а для Вашего полного осознания того, что Вы написали. Вам это, видимо, не требуется. Т.к. для Вас и СУБД растут на полках магазинов.
2) "Это как бы классика жанра :). Года 3 назад появилась "(с)
Т.е. в комментарии (5) написано верно? Тогда Ваша фраза "1С озаботились написать достаточно доступную статью про блокировки данных"(с) - удивительное хамство в адрес разработчиков 1С !!!
3) "Рад за вас что наконец то прочитали"(с)
В этой статье ничего нового, для меня, не написано. Это один из способов реализовать решение проблемы "документ-запрос-итоги". Именно - только реализовать!!! Сам способ - очевиден. В частности это обуславливает появление т.н. "сервера приложений" при использовании СУБД с "запросным" (например - SQL) ЯМД (кратко звучит как - "запросные" СУБД). Разработчикам 1С-а остаётся еще реализовать "логическую" транзакцию силами "сервера приложений" и тогда они смогут устранить основные недостатки подобных СУБД. :-) Об ЭТОМ думает, пишет, делает и т.д. - "весь Мир". И выбирает более "дешевые" для пользователя (!!!) решения, чем это делают разработчики 1С-ов.
Сама "суть-проблема" появилась очень давно, но "обострилась" с появлением "интерактивных" ИС-ов.
Вы выбрали (предложили) самый дешевый способ - иметь "бардак" в интерактивных "задачах" и наводить порядок позже в "пакетном" режиме. Это сильно согласуется с "концепциям" продуктов 1С-разработчиков. ;-) Но ЭТО было УЖЕ сделано лет 40 тому назад...
P.S. Ссылки на первоисточники, я "публиковал" в данном обсуждении для подкрепления (прояснения) сути своих вопросов для нашего с Вами понимание о ЧЕМ мы говорим. А по своему роду деятельности такие материалы стараюсь изучать по мере их появления, в ожидании появления в продуктах от 1С "логической транзакции"... :-)
(104)
"Вмешаться не смог"(с)
Игорь.
Зря! Тема - наша с Вами: "Мы пишем з...". Помню Вы мне написали (спросили):
"Можно , конечно, порассуждать о видах блокировок . Но я скромно спрошу : а при чём тут задача просроченных долгов ?"(с) [декабрь 2009 года]
И, хотя, тогда о блокировка я упомянул не в контексте "видов" блокировок, а контексте "возможности" их использования (типа, ближе к теме http://infostart.ru/public/92746/ ).
Но зря мы не поговорили тогда о "видах". ;-) Вот сейчас пытаемся поговорить. Тщетно... :-(

(0)
Р.P.P.....S.
Олег.
Моё личное мнение - у Вас лучше получается писать об "УУ" в части "как ЭТО должно быть сделано на бумаге". А что касается ИС в части ЕГО воплощения в ЭВМ-ах - лучше не писать. Не знаю может МЫ не доросли до "УУ" по смыслу, но точно знаю - по его АвтоМехАнизации НАМ еще нужно очень долго расти. Т.к. именно в "УУ" требуется "оперативность И точность". А не ИЛИ. И для этого НАМ надо научиться (понимать) зачем ОНИ придумали БД (банк данных) и как с БД (база данных) должна работать СУБД.

Вот...(с)
Всем спасибо за внимание.
106. Ish_2 1104 07.10.11 18:54 Сейчас в теме
(105) Владимир , я честно пытался разговаривать с Вами по существу и по-взрослому.
Сдаю вахту . То бишь торжественно уступаю это право Олегу .
Пусть потренируется.
107. hogik 443 07.10.11 23:56 Сейчас в теме
(106)
Игорь.
Эх, ну и "заноза" Вы... ;-)
Включаем режим - "узко-конкретно"(с).
Попытаюсь излагать в терминах 1С.
Разделяемые итого не рассматриваем.
Связь с другими видами документов и регистров не рассматриваем. Т.к. вопрос перевода всей конфигурации на управляемые блокировки не является ключевым моментом публикации.
Общие условия:
1) Управляемые блокировки.
2) Документ - одна транзакция.
3) Одна строка документа образует одну строку движения в одном регистре накопления.
4) Оперативное проведение.
Вариант #1: Отключено использования текущих итогов.
=== Проверка отрицательности итога не имеет смысла. Тема обсуждения закрыта. ;-)
Вариант #2: Включено использования текущих итогов, но проверка отрицательности не требуется.
Вариант #2.1: Не интересует корректность итогов.
=== Надо использовать Вариант #1.
Вариант #2.2: Требуется обеспечить корректность итогов.
=== Блокировки итогов должны быть установлены на все время жизни транзакции.
Вариант #3: Требуется проверка отрицательности итогов.
=== Необходимо использовать рекомендации из: http://gilev.blogspot.com/2010/07/1_23.html

Автор темы утверждает, что если не требуется контроля отрицательности, то надо выбросить блокировку итогов, т.е. Вариант 2.1. Т.е. движения по каждой строке документа записываются, фиксируются и откатываются всегда корректно. А корректность актуальных итогов нас не интересует. Тогда какой смысл их, вообще, обновлять при проведении - нагружать систему лишней работой. Т.е. должнО использовать Вариант #1. А при этом варианте в модуле проведения, вообще, нет строк алгоритма проверки отрицательности. Т.е. нет предмета для обсуждения...
110. comol 5051 08.10.11 18:01 Сейчас в теме
(105) hogik, Владимир, вопросы и только вопросы... никакого "поливания грязью" пожалуйста. Все уже давно поняли смысл статьи и отразили своё мнение но закрывать последние коменты вашими... ээээ.... "теоретическими изысканиями" не хочется, но чувствую придётся... в принципе когда грамотный человек читает фразы вида
Разработчикам 1С-а остаётся еще реализовать "логическую" транзакцию силами "сервера приложений"

или
ратко звучит как - "запросные" СУБД
уже всё поймёт

P.S на вопросы к автору как и обещал отвечаю:

Т.е. в комментарии (5) написано верно?
- написано верно. 1С подробно рассказали о блокировках за что им большое спасибо. О том КАК они работают. Я только в дополнение сделал акцент на теме ЗАЧЕМ они нужны в прикладной логике работы ИС.
112. hogik 443 09.10.11 04:33 Сейчас в теме
(110)
Олег.
Даю информацию по появлению жаргонного (в среда СУБД-шников) выражения: "запросные" СУБД.
Если чего будет не понятно - спрашиваете. ;-)

1) "Важно подчеркнуть, что для разработчиков и пользователей СУБД точным определением реализованной в ней модели данных являются фактически языковые средства определения данных и манипулирования данными, воплощающие функциональность этой модели. Действительно, базовая реляционная модель Кодда (материализованная в языке ALPHA) – совсем иная модель данных, чем реляционная модель, воплощенная в языке SQL, или RM/T. По этой причине существует целое семейство возможных реляционных моделей данных и имеются различные конкретные его представители."(с)
[Абстракции и модели в системах баз данных. М. Р. Когаловский. 01.08.1998]

1) "В классической теории баз данных, модель данных есть формальная теория представления и обработки данных в системе управления базами данных (СУБД), которая включает, по меньшей мере, три аспекта:
а) аспект структуры: методы описания типов и логических структур данных в базе данных;
б) аспект манипуляции: методы манипулирования данными;
в) аспект целостности: методы описания и поддержки целостности базы данных.
Аспект структуры определяет, что из себя логически представляет база данных, аспект манипуляции определяет способы перехода между состояниями базы данных (то есть способы модификации данных) и способы извлечения данных из базы данных, аспект целостности определяет средства описаний корректных состояний базы данных.
Модель данных — это абстрактное, самодостаточное, логическое определение объектов, операторов и прочих элементов, в совокупности составляющих абстрактную машину доступа к данным, с которой взаимодействует пользователь. Эти объекты позволяют моделировать структуру данных, а операторы — поведение данных."(с)
[Дейт К. Дж. Введение в системы баз данных. — 8-е изд. — М.: «Вильямс», 2006.]

3)Пример другого ЯМД.
В рамках иерархической модели выделяют языковые средства описания данных (ЯОД) и средства манипулирования данными (ЯМД). Каждая физическая база описывается набором операторов, обусловливающих как ее логическую структуру, так и структуру хранения БД. При этом способ доступа устанавливает способ организации взаимосвязи физических записей.
Определены следующие способы доступа:
иерархически последовательный;
иерархически индексно-последовательный;
иерархически прямой;
иерархически индексно-прямой;
индексный.

4) В каких случаях ставятся кавычки?
"В современном русском языке кавычки выполняют следующие функции:
1. Выделение безабзацной прямой речи и цитат.
2. Выделение условных (собственных) наименований.
3. Выделение слов, которые употребляются в необычном, ироническом, особом значении."(с)
[ http://www.gramota.ru/spravka/letters/?rub=kav ]

P.S. Выражение "логическая транзакция" мною было использовано в контексте "перенести на сервер приложений" по аналогии с управляемыми (логическими) блокировками. Было заключено в кавычки и поставлен смайл :-) Но, на самом деле это очень интересная тема - как это можно сделать. Можем поговорить и на эту тему... :-)
113. comol 5051 09.10.11 11:35 Сейчас в теме
(112) hogik, Больше ничего доказывать вам не собираюсь :). Свою "умность" вы уже показали, мы её прочитали и немного посмеялись. Пожалуйста проявите уважение и не пишите больше ваших комментариев, ну или пройдите сертификацию "1С Сециалист по плстформе" и "1С Эксперт по техн. вопросам" чтобы вы могли по сути что-то писать.
114. hogik 443 09.10.11 17:15 Сейчас в теме
(113)
Олег.
Спасибо. Вы мне уже всё доказали.
Кроме одного:
"Для чего нужны блокировки"(с), если "от блокировок можно просто отказаться"(с)... :-)
115. comol 5051 09.10.11 22:39 Сейчас в теме
101. hogik 443 07.10.11 02:21 Сейчас в теме
(Всем)
:-) Полезная ссылка:
http://lavelin.ru/index.php/article/1c/54-razrabotka/136-blokirovki-dannyh-v-1spredpriyatii-8

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

(0)
Олег.
Гениально !!!
Не надо рисовать табличку... :-)
103. comol 5051 07.10.11 10:26 Сейчас в теме
(101) hogik, Это как бы классика жанра :). Года 3 назад появилась в официальных источниках... по ней экзамены люди уже сдают :). Рад за вас что наконец то прочитали :)
104. Ish_2 1104 07.10.11 10:39 Сейчас в теме
Почитал. Вмешаться не смог - захлебнулся своим ядом.
Владимиру ничего не досталось.
hogik; comol; +2 Ответить
108. hogik 443 08.10.11 04:27 Сейчас в теме
P.S. к сообщению #107.
Т.е. идея переноса в конец транзакции проверки отрицательности "базируется" на том факте, что блокировки неизбежно выставляются для всех изменяемых итогов в "момент" записи движения. А блокировки (собственно для обновления итогов) как были так и остаются на всё время жизни транзакции. И проведение документа в другой сессии будет ожидать их освобождения.
А утверждение автора про блокировки: "а может от них совсем отказаться?"(с) - имеет смысл трактовать, как: "если не требуется проверка отрицательности итогов, то и не надо выполнять код этого алгоритма".
109. comol 5051 08.10.11 17:49 Сейчас в теме
(108) hogik, Вот другое дело :)
111. hogik 443 08.10.11 20:50 Сейчас в теме
(109) (110)
Олег.
Бесполезно обсуждать саму суть Вашей "статьи", т.к. это не статья, а заметка в блоге. Т.е. изложено Ваше убогое представление о "прикладной логике работы ИС"(с) с очень значимыми (для читателя) ошибками того "ЗАЧЕМ они нужны"(с).
Но "пустоту" Вашей "статьи" Вы смачно снабдили хамским пассажами по адресу разработчиков 1С-а и абсолютным неуважением к читателям.
Например, про статью 2007 года, написать в 2011 году: "1С озаботились написать"(с) - мог только очень "вежливый" человек.
Основная суть моей с Вами беседы, выяснить - о какой статье идет речь. Т.к. по Вашим изложениям исходной статьи "в двух словах"(с), можно сделать вывод о существовании другой статьи. И она существует - о "Новой логике проведения" (НЛП). Но, таблица #3 абсолютно не соответствует основной цели (сути!!!) НЛП. Именно по этому моменту мы и начали нашу увлекательную беседу. Которая свелась к доказательству моей "глупости" и Вашей "умности". Что очень часто случается в разговоре пользователя некого "объекта" с разработчиком оного... :-)
116. dawnds8 10.10.11 08:26 Сейчас в теме
Да много нового узнал))) считаю ,что блокировки это одна из самых больших проблем 1с, после производительности конечно.. и без них нельзя и с ними тяжко)) так, что будем ждать новых решений этой проблемы..)) Надеемся на ВАС ,о могучие разработчики типовых конфиг))))) ну и платформеров тоже
117. Maks_Payn 11.10.11 16:53 Сейчас в теме
Плагиат, ничего нового.
120. comol 5051 13.10.11 15:17 Сейчас в теме
(117) Maks_Payn, Приведите источник. Если только с ЖЖ моего плагиат :)
118. SoulPower 3 12.10.11 22:09 Сейчас в теме
Плюс за то, что заставили ещё раз разобраться в этой теме, спасибо.
119. hogik 443 12.10.11 22:12 Сейчас в теме
Ссылка на приложение к данной теме:
http://infostart.ru/public/94044/
121. Арчибальд 2706 17.10.11 13:31 Сейчас в теме
Первый раз читал статью "на бегу", будучи в отпуске. Что-то меня зацепило тогда, и решил вернуться к этому попозже. Выяснилось, что зацепился взгляд за фразу:
Если у вас в базе менеджер имеет право провести документ вне зависимости от того есть товар(деньги) на остатках или нет, зачем вам тогда блокировки?

Так, перефразируем:
Если допускается ситуация, когда х < 0, то блокировки не нужны.
Гм. А чем ноль так уж отличается от любого другого числа для СУБД? Если мы торгуем шариковыми ручками, и разрешаем кладовщику таскать одну из них в кармане (на всякий случай), тогда мы будем иметь не 0, а 1. Понятно, что и тогда блокировки не нужны.
Пусть у кладовщика есть помощник. Это уже две ручки. Блокировки точно так же "не нужны".
Получается, что:
1. Если допускается, что остатки могут быть меньше некоего числа, то блокировки не нужны - гласит статья.
2. Остатки (товара) в натуре наверняка меньше, чем количество атомов в наблюдаемой вселенной - не требует доказательства.
Вывод: блокировки вообще не нужны.
На самом деле, автор оговаривается: все, мол, не так просто. И верно, все не так просто. И это, получается, единственное истинное утверждение в статье...
Минус.
122. comol 5051 17.10.11 16:55 Сейчас в теме
(121) Арчибальд, Что-то мне подсказывает что у вас тоже большой опыт работы с 7.7 и вы тоже как и Владимир никак не можете понять как это так "Блокировки сервера приложений" и "Блокировки SQL Сервера"... которые ничего общего между собой не имеют.

Итак если остатки < 0 разрешены не нужны блокировки, накладываемые в явном виде программистом, с точки зрения бизнес логики При этом платформа/SQL сервер наложат блокировки которые необходимы для обеспечения целостности данных автоматически. Собственно статья об этом... Оказывается не так просто донести такую простую мысль...
123. Арчибальд 2706 17.10.11 17:14 Сейчас в теме
(122) В статье нет слов
"Блокировки сервера приложений" и "Блокировки SQL Сервера"
Как я теперь вижу, речь идет о том, что в большинстве случаев достаточно бывает платформенных блокировок. Однако в статье эта мысль тщательно скрывается.
124. cool.vlad4 2 17.10.11 17:19 Сейчас в теме
(123) Ему об этом в самом начале писали, выражатся яснее(либо в соседней теме comol-a) - о том, что блокировками он жонглирует и соответственно запросто может ввести читателя в заблуждение.
Арчибальд; hogik; +2 Ответить
129. Арчибальд 2706 17.10.11 18:54 Сейчас в теме
(124)
блокировками он жонглирует и соответственно запросто может ввести читателя в заблуждение
За то и минус пришлось выдать...
125. nafa 657 17.10.11 17:44 Сейчас в теме
(123)
Тут вот какая штука.
Правильная формулировка смысла статьи - не нужна блокировка регистра (не считая платформенной), если ни один документ при проведении ( + ни одна обработка, если есть обработки, меняющие записи регистра в обход процедур проведения) не осуществляет чтение данных этого регистра.
НО: В такой ситуации эта блокировка даже если она и установлена, то никому не мешает. И смысл тогда ее отключать? (Ведь отключив блокировку, надо помнить об этом, чтобы все последующие изменения в программу это тоже учитывали, а это уже некоторые дополнительные затраты рабочего времени).
127. comol 5051 17.10.11 18:14 Сейчас в теме
(125) nafa, Нее... немного не так правильно:
"если ни один документ при проведении... не использует эксклюзивного чтения остатков" А блокировка ещё как мешает... мешает другим "соседним" блокировкам. Даже не представляете насколько начинает всё быстрее работать в их отстутствие... перепроведение базы в течение рабочего дня становится возможным...
128. nafa 657 17.10.11 18:19 Сейчас в теме
(127)
comol пишет:
А блокировка ещё как мешает... мешает другим "соседним" блокировкам.

1. Можно ли подробнее, чем она мешает
Даже не представляете насколько начинает всё быстрее работать в их отстутствие... перепроведение базы в течение рабочего дня становится возможным...

2. Если у Вас конфигурация такова, что при проведении документов не используются данные регистров (т.е. при списании просто делаем проводки по набору измерений не зависящему от остатков) - зачем вообще базу перепроводить ???
130. hogik 443 17.10.11 23:11 Сейчас в теме
(128)(129)
Александр (Арчибальд) & Виталий (nafa).
Разобравшись в вопросе применения управляемых блокировок (УБ) в алгоритме проверки отрицательных остатков, можно перейти к другому вопросу - почему разработчики 1С-а, вообще, придумали инструмент УБ.
А вопрос УБ в проверке отрицательности остатков, если отрицательность никого не интересует, решается очень просто - убери весь код алгоритма проверки... ;-)
См. (107) сообщение.
132. comol 5051 18.10.11 10:02 Сейчас в теме
(130) hogik, Браво, Владимир. Спустя месяц вы всё-таки поняли смысл моей статьи.
133. hogik 443 18.10.11 21:33 Сейчас в теме
(132)
Да, Олег. Я наконец понял смысл Вашей статьи.
Это рассказ о Шариков-ых ручках.
Я второй сМыслИ, из Вашей статьи, не могу понять.
Что такое - "блокировка"?
131. comol 5051 18.10.11 10:02 Сейчас в теме
(128) nafa, Дело в том что многие организации работают по принципу: сначала продаём потом разбираемся... т.е. продать человек может всегда, даже если по системе на остатках товара нет, а потом уже операторы разбираются как так получилось, оприходуют задним числом и т.п. вот в этом случае
1) не нужны блокировки
2) нужно перепроведение базы

Но естественно если у вас последняя типовая конфигурация под 8.2 - вам повезло. При отключении контроля блокировок не будет. Только таких пока не много...
126. comol 5051 17.10.11 18:09 Сейчас в теме
(123) Арчибальд, В статье об этом в явном виде написано "Поставьте режим управляемых и больше ничего не делайте". Именно это я подразумеваю под "отключением" блокировок... Можно конечно "Красным жирным" выделить... ну теперь уже буду знать...
135. codewarriorxxx 19.10.11 16:43 Сейчас в теме
если можно отказаться то смысл в них?
137. comol 5051 19.10.11 20:50 Сейчас в теме
(135) codewarriorxxx, так вот об этом статья и 2 листа дискуссии :).
140. Vladimir_Konyrev 255 26.10.11 14:19 Сейчас в теме
Статья привлекает своей краткостью, не у всех есть доступ на kb, а здесь все в открытую. Автору +
141. MrVesna 20 20.01.12 20:12 Сейчас в теме
Подскажите, пожалуйста, как можно заблокировать значения регистра, если оно имеет несколько определенных значений. Например Субконто1 - это СкладХ (указан в шапке документа) и может быть СкладОсновной (определенный склад, с которого можно списать, если на СкладеХ не хватает).
142. comol 5051 27.01.12 00:58 Сейчас в теме
(141) MrVesna, Смотря в каком режиме. Управляемом или автоматическом. В любом случае сперва вам нужно табличку "сделать" из этих 2-х складов и номенклатуры документа без соединения а "каждое с каждым". Потом или запросом остатки получить из регистра с инструкцией "для изменения" или посмотреть хелп по "блокировка данных". Источник данных будет ваша табличка.
143. mec 22.03.13 11:01 Сейчас в теме
У нас в компании каждый год в ноябре-декабре с основной базой происходит тихий ужас. Блокировки не давали покоя, т.к. нагрузка на базы становится в 3-4 раза больше. Мы переписали кучу кода, переписали кучу запросов, пересмотрели структуру БД по индексам, но блокировки уходили очень медленно, кода очень много, узких мест тоже очень много. И все равно оставались. Нервы были на пределе. Решение оказалось довольно простым - перевод конфигурации на управляемые блокировки. Проблема практически исчезла в ноль. Самое главное не забыть предварительно написать управляемые блокировки для критичных регистров остатков типа партии и товары на складах, дабы не уйти в минуса. Давно хотели перейти на управляемые блокировки, но все было страшно как поведет себя база, не станет ли хуже. На демо-базах полностью не протестируешь. Реальный результат показывает когда реально много пользователей работает с базой. Под много у нас я подразумеваю 750 одновременно работающих пользователей.
Итог: нам управляемые блокировки сильно помогли. Желаю и остальным кто не успел опробовать этот функционал - успехов. Не все так страшно, как вначале кажется
ugroblin; +1 Ответить
157. ZLENKO 398 25.06.14 13:38 Сейчас в теме
За более чем пол года ни одного поста в теме :-) Все уже порешали свои проблемы с блокировками ? :-)
158. Elisy 948 15.09.14 11:49 Сейчас в теме
Интересная статья и обсуждение. Возник вопрос следующий:
Есть метод
Блокировка.Заблокировать();
Каким образом (вызовом, завершением транзакции) блокировка снимается и как это сделать в явном виде?
159. HiGHT 19.09.14 16:32 Сейчас в теме
(158) Elisy,
Блокировку можно наложить как в транзакции, так и вне ее.
Блокировка сама будет снята после окончания процедуры или функции.
Принудительно можно снять блокировку в коде присвоив объекту любое другое значение.

Например:

Об = Документы.ЗаказПокупателя.НайтиПоНомеру("УТ00000034653").ПолучитьОбъект();
Об.Заблокировать(); //Накладываем бокировку
Об = Неопределено; //Снимаем блокировку
160. comol 5051 19.09.14 21:56 Сейчас в теме
(158) Elisy, (159) HiGHT, оу оу... "не учите людей плохому" Об.Заблокировать(); и Блокировка.Заблокировать(); Это ваааще о разном. Ну прямо соооовсем о разном. В статье только про транзакционные блокировки. Объектные тут не рассматриваются, а транзакционные блокировки накладываются естественно ТОЛЬКО в транзакции. Соответственно по завершении транзакции она снимается. А вот снять в явном виде это хороший вопрос... боюсь только вложенную транзакцию для этого придётся делать.
161. hogik 443 20.09.14 03:39 Сейчас в теме
(160)
Олег (comol).
Думаю, что наличие возможности снимать блокировки не по завершению транзакции противоречит самой идей и реализации в платформе "управляемых блокировок". И вложенные транзакции тут не помогут. Т.к., насколько мне известно, реальная транзакции по отношению к СУБД остаётся одна - самого верхнего уровня. Или чего уже изменилось в новых версиях в части вложенности транзакций?
162. comol 5051 20.09.14 14:34 Сейчас в теме
(161) hogik, Дело в том что управляемая блокировка не имеет никакого отношения к транзакции СУБД. В соответствии с документацией блокировка должна сниматься при выходе из транзакции в которой была установлена. В данном случае речь идёт о транзакции 1С, которые опять же в управляемом режиме имеют мало что общего с транзакциями СУБД. Конечно надо проверить... Как посмотрю отпишусь - сейчас лень, но действительно вопрос интересный.
163. ZLENKO 398 18.12.14 18:17 Сейчас в теме
(160) "А вот снять в явном виде это хороший вопрос..."

Думаю такая возможность появится в 1С: Предприятие 8.4 :-)
Оставьте свое сообщение