1с ошибка не удалось заблокировать запись

Не удалось заблокировать запись. ☑ 0

Тимак

17.10.11

16:47

Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.

Ошибка блокировки объекта. Объект уже заблокирован: компьютер RB_Barysheva, пользователь: Барышева, сеанс: 7610, начат 12,10,2011 в 8.25.15, приложение: Толстый клиент!

Привет всем. Объясните пожалуйста, что это такое и возможна ли эта ошибка изза сети?

1

Jstunner

17.10.11

16:48

наверняка

2

Тимак

17.10.11

16:49

Этот толстый клиент появился когда базу 1сник перевел на скэль.

3

Александр_

Тверь

17.10.11

16:50

(0) а что не понятно написано?

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

4

Тимак

17.10.11

16:52

Мне просто не понятно, что с этой бедой делать.

5

Александр_

Тверь

17.10.11

16:53

(4) если коротко и по делу — ничего.

Ну или позвать специалиста.

6

hhhh

17.10.11

16:54

(4) найти компьютер Барышевой и выкинуть в окно.

7

Тимак

17.10.11

16:54

Сервер — свитч — пользователи

Свитч заменили, кабели переобжали, сетевухи даже на некоторых компах поменяли

8

Maxus43

17.10.11

16:55

просто в данный момент юзер Барышева что то делает с тем объектом… нашли толстого клиента то этого?)

9

Александр_

Тверь

17.10.11

16:56

(7) ваше заявление вызывает как минимум улыбку.

ошибка в (0) НИКАКОГО отношения к свитчам, кабелям и сетевухам не имеет.

Вообще ваш пост похож на провакацию.

10

Тимак

17.10.11

16:56

не нашли.

11

Maxus43

17.10.11

16:57

открываем консоль, убиваем сессию этого юзера. всё.

12

Maxus43

17.10.11

16:57

* консоль 1с

13

Тимак

17.10.11

16:58

(11) убиваем, но потом опять появляется

14

Александр_

Тверь

17.10.11

16:58

(10)

я предлагаю вам натуральный эксперемент!

возьмите двух юзеров, возьмите листок бумажки и ручку (ручка и есть тот самый объект) и попросите юзеров ОДНОВРЕМЕННО написать что-нибудь на листочке и посмотрите что получится. Это суть проблемы.

Конкретно сейчас — найдите пользователя «Барышева» и закройте ему программу.

15

Александр_

Тверь

17.10.11

16:59

(13) ну тогда перегрузите сервер предприятия, для вас это будет проще всего

16

Тимак

17.10.11

16:59

(9)если к этим вещам эта ошибка не имеет никакого отношения, то к чему имеет.

17

Александр_

Тверь

17.10.11

16:59

(16) см (3) и (14)

18

Тимак

17.10.11

17:00

и сервер перезагружали и закрывали пользователей у которых появляется данная ошибка, но тем не менее каждый день на протяжении недели это происходит!

19

Александр_

Тверь

17.10.11

17:01

(18) ну это и будет происходить. Вобщем-то это «нормальная» ситуация, при кривых руках :)

20

Александр_

Тверь

17.10.11

17:01

прочитайте на тему SQL блокировки

21

Maxus43

17.10.11

17:01

(18) просто юзер барышева заходи в какойнить справочник, меняет там букву, не записывает и не закрывает элемент и уходит по своим делам пить чай и делать маникюр, в итоге все курят

22

Тимак

17.10.11

17:04

Я понимаю что это за ошибка, как от нее избавиться

23

Тимак

17.10.11

17:06

Если это в сети, то будем мы искать проблему в сети, если в 1с то нужно сказать 1снику пусть чето там делает.

24

hhhh

17.10.11

17:08

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

25

Maxus43

17.10.11

17:08

в юзере проблема, не закрывает свои изменения, видимо лень.

хотя конечно может и сессия зависать, это уже может и от сети, если глючит

26

Тимак

17.10.11

17:09

да не только барышева, почти у всех такая ерунда выскакивает переодически

27

hhhh

17.10.11

17:09

в общем, вызывайте 1сника.

28

Maxus43

17.10.11

17:10

пакеты не теряются в сети? ну и в антивирус всё что связано с 1с как исключение впихать

29

Тимак

17.10.11

17:11

(27) 1сник кричит это изза сетки

(28) пинг хороший

30

Maxus43

17.10.11

17:14

антивирус на серваке процессы rphost мониторит?

31

Тимак

17.10.11

17:15

(30)нет

32

Maxus43

17.10.11

17:16

вместе с 1сником медитируйте, чо ещё сказать…

33

Тимак

17.10.11

17:17

(32) видимо предется.

34

Александр_

Тверь

17.10.11

18:09

(28) объясни мне, как потеря пакетов может быть связана с блокировками в БД?  Вдруг я чего не знаю.

35

apokrit

17.10.11

18:15

(34) К блокировкам БД сабж никакого отношения не имеет.

(0) Возможно код кривой в форме — где-то циклическая ссылка висит.

36

Александр_

Тверь

18.10.11

07:54

(35) Это был сарказм.

Не удалось заблокировать запись.

Я

  

Тимак

17.10.11 — 16:47

Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.

Ошибка блокировки объекта. Объект уже заблокирован: компьютер RB_Barysheva, пользователь: Барышева, сеанс: 7610, начат 12,10,2011 в 8.25.15, приложение: Толстый клиент!

Привет всем. Объясните пожалуйста, что это такое и возможна ли эта ошибка изза сети?

  

Jstunner

1 — 17.10.11 — 16:48

наверняка

  

Тимак

2 — 17.10.11 — 16:49

Этот толстый клиент появился когда базу 1сник перевел на скэль.

  

Александр_Тверь

3 — 17.10.11 — 16:50

(0) а что не понятно написано?

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

  

Тимак

4 — 17.10.11 — 16:52

Мне просто не понятно, что с этой бедой делать.

  

Александр_Тверь

5 — 17.10.11 — 16:53

(4) если коротко и по делу — ничего.

Ну или позвать специалиста.

  

hhhh

6 — 17.10.11 — 16:54

(4) найти компьютер Барышевой и выкинуть в окно.

  

Тимак

7 — 17.10.11 — 16:54

Сервер — свитч — пользователи

Свитч заменили, кабели переобжали, сетевухи даже на некоторых компах поменяли

  

Maxus43

8 — 17.10.11 — 16:55

просто в данный момент юзер Барышева что то делает с тем объектом… нашли толстого клиента то этого?)

  

Александр_Тверь

9 — 17.10.11 — 16:56

(7) ваше заявление вызывает как минимум улыбку.

ошибка в (0) НИКАКОГО отношения к свитчам, кабелям и сетевухам не имеет.

Вообще ваш пост похож на провакацию.

  

Тимак

10 — 17.10.11 — 16:56

не нашли.

  

Maxus43

11 — 17.10.11 — 16:57

открываем консоль, убиваем сессию этого юзера. всё.

  

Maxus43

12 — 17.10.11 — 16:57

* консоль 1с

  

Тимак

13 — 17.10.11 — 16:58

(11) убиваем, но потом опять появляется

  

Александр_Тверь

14 — 17.10.11 — 16:58

(10)

я предлагаю вам натуральный эксперемент!

возьмите двух юзеров, возьмите листок бумажки и ручку (ручка и есть тот самый объект) и попросите юзеров ОДНОВРЕМЕННО написать что-нибудь на листочке и посмотрите что получится. Это суть проблемы.

Конкретно сейчас — найдите пользователя «Барышева» и закройте ему программу.

  

Александр_Тверь

15 — 17.10.11 — 16:59

(13) ну тогда перегрузите сервер предприятия, для вас это будет проще всего

  

Тимак

16 — 17.10.11 — 16:59

(9)если к этим вещам эта ошибка не имеет никакого отношения, то к чему имеет.

  

Александр_Тверь

17 — 17.10.11 — 16:59

(16) см (3) и (14)

  

Тимак

18 — 17.10.11 — 17:00

и сервер перезагружали и закрывали пользователей у которых появляется данная ошибка, но тем не менее каждый день на протяжении недели это происходит!

  

Александр_Тверь

19 — 17.10.11 — 17:01

(18) ну это и будет происходить. Вобщем-то это «нормальная» ситуация, при кривых руках :)

  

Александр_Тверь

20 — 17.10.11 — 17:01

прочитайте на тему SQL блокировки

  

Maxus43

21 — 17.10.11 — 17:01

(18) просто юзер барышева заходи в какойнить справочник, меняет там букву, не записывает и не закрывает элемент и уходит по своим делам пить чай и делать маникюр, в итоге все курят

  

Тимак

22 — 17.10.11 — 17:04

Я понимаю что это за ошибка, как от нее избавиться

  

Тимак

23 — 17.10.11 — 17:06

Если это в сети, то будем мы искать проблему в сети, если в 1с то нужно сказать 1снику пусть чето там делает.

  

hhhh

24 — 17.10.11 — 17:08

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

  

Maxus43

25 — 17.10.11 — 17:08

в юзере проблема, не закрывает свои изменения, видимо лень.

хотя конечно может и сессия зависать, это уже может и от сети, если глючит

  

Тимак

26 — 17.10.11 — 17:09

да не только барышева, почти у всех такая ерунда выскакивает переодически

  

hhhh

27 — 17.10.11 — 17:09

в общем, вызывайте 1сника.

  

Maxus43

28 — 17.10.11 — 17:10

пакеты не теряются в сети? ну и в антивирус всё что связано с 1с как исключение впихать

  

Тимак

29 — 17.10.11 — 17:11

(27) 1сник кричит это изза сетки

(28) пинг хороший

  

Maxus43

30 — 17.10.11 — 17:14

антивирус на серваке процессы rphost мониторит?

  

Тимак

31 — 17.10.11 — 17:15

(30)нет

  

Maxus43

32 — 17.10.11 — 17:16

вместе с 1сником медитируйте, чо ещё сказать…

  

Тимак

33 — 17.10.11 — 17:17

(32) видимо предется.

  

Александр_Тверь

34 — 17.10.11 — 18:09

(28) объясни мне, как потеря пакетов может быть связана с блокировками в БД?  Вдруг я чего не знаю.

  

apokrit

35 — 17.10.11 — 18:15

(34) К блокировкам БД сабж никакого отношения не имеет.

(0) Возможно код кривой в форме — где-то циклическая ссылка висит.

  

Александр_Тверь

36 — 18.10.11 — 07:54

(35) Это был сарказм.

Ошибка при повторном обмене РИБ

Автор PavelBaryshev, 24 мар 2011, 06:47

0 Пользователей и 1 гость просматривают эту тему.

Добрый день, подскажите что за ошибка и как от нее избавится, настроен РИБ Управление торговлей 10.3, обмен выгружает в локальный каталог. При повторном выполнении обмена выскакивает такая ошибка:


Ошибка при записи изменений при обмене:  Ошибка при вызове метода контекста (НачатьЗапись): Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.
Запись заблокирована пользователем 'Программист 1С', с компьютера 'PROGRAMMIST_1C', из приложения '1С:Предприятие', соединение '15'.
Запись изменений текущей информационной базы в файл обмена завершилась с ошибками!

База у меня на SQL, и вот такая вот беда, а ошибка вылетает вот в этой строке

               Если ЭтоРИБ Тогда

// Создаем новое сообщение
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
[color=black]ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);[/color]

// для РИБ изменения в информационной базе
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, СтруктураНастроекОбменаДанными.КоличествоЭлементовВТранзакцииНаВыгрузкуДанных);

// Завершаем запись сообщения
ЗаписьСообщения.ЗакончитьЗапись();

ЗаписьXML.Закрыть();

СтруктураНастроекОбменаДанными.РезультатЗаписиДанных = Истина;
Иначе

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

КонецЕсли;

в общем модуле «ПроцедурыОбменаДанными» в «Процедура ЗаписатьСообщенияСИзмененеиямиДляУзла(СтруктураНастроекОбменаДанными, Знач ИмяФайлаОбменаДанными)»


Тоже столкнулся с данной проблемой. Перезапуск 1С помог.


Подвисшие сеансы пользователя скорее всего…. нужно перезапистить сервер 1С или сервер на котором база лежит…


Кто-нибудь знает как повторить обмен выбранными документами с 1с бухгалтерией?


Теги:

  • Форум 1С

  • ОБЩИЙ ТЕМАТИЧЕСКИЙ ФОРУМ 1С

  • Обмен данными

  • Ошибка при повторном обмене РИБ

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

1

Блокировка документа тем же компьютером, на котором возникает ошибка блокировки

01.04.2015, 08:18. Показов 3645. Ответов 9


Студворк — интернет-сервис помощи студентам

Здравствуйте, подскажите, пожалуйста:
при проведении док. «Принятие на работу организаций» выдает ошибку «Не удалось заблокировать запись. Дей-е (изм., уд. или блокировка записи) не выполнено. Ошибка блокирования объекта……» , при этом компьютер (который якобы работает с этим документом) указан тот же , за которым работает пользователь , у которого и возникает проблема!
Ежедневно ко мне обращается пользователь с данной проблемой(. Старый сеанс не висит, проверяли…
Пробовала чистить кэш, не помогло. Ума не приложу в чем может быть проблема????
На моем компьютере все нормальноо работает…
Очень прошу, всех у кого есть идеи по этому поводу , ПОМОГИТЕ

Р.S.: зарплатная база

0

Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

01.04.2015, 12:02

2

kittybello, типовая?

0

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

01.04.2015, 12:07

 [ТС]

3

конкретно єтот документ не изменялся, а так правки в конфирурации были

0

Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

01.04.2015, 13:24

4

Вариант базы какой Клиент сервер?

Добавлено через 1 минуту
Номер сеанса который заблокировал совпадает с номером сеанса текущего пользователя (это можно посмотреть в консоле сервера 1С)

0

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

01.04.2015, 13:28

 [ТС]

5

сейчас нет возможности посмотреть, но вы не могли бы более развернуто объяснить: что это дает?

0

Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

01.04.2015, 13:33

6

В какую сторону копать. Возможно что то работает в фоне от имени этого пользователя

0

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

01.04.2015, 13:34

 [ТС]

7

клиент-сервер

0

Эксперт 1С

841 / 604 / 211

Регистрация: 24.07.2013

Сообщений: 2,101

04.04.2015, 09:46

8

При проведнии документа «Прием на работу» изменяется справочник «Сотрудники». Возможно в этот момент принимаемый сотрудник открыт и редактируется.

0

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

07.04.2015, 08:04

 [ТС]

9

да, я думала об этом, однако же в форме элемента справочника Сотрудники предусмотрено создание док Прием на работу

0

0 / 0 / 0

Регистрация: 11.09.2014

Сообщений: 14

09.04.2015, 10:22

 [ТС]

10

Действительно, после обновления при проведении кадровых док. вносятся изменения и в эл. спр. Сотрудники орг.
Решение: закрывать форму элемента справочника автоматически при нажатии на кнопку Добавить в ТЧ Кадровые документы

Всем спасибо за отзывчивость)

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.04.2015, 10:22

10

Добрый день, 
хотела поправить докумет — а с ним не дают делать никакие действия
Пишет Не удалось заблокировать запись. Действие не выполнено. Ошибка блокировки объекта Объект уже заблокирован.Тонкий клиент
ЭТО ЧТО???? подскажиете как убрать -пожалуйста
1С:Предприятие 8.3 (8.3.4.408)
Конфигурация Бухгалтерия предприятия, редакция 3.0 (3.0.32.7)

Один и тот же документ редактируют два оператора.

Заполнить, проверить и подать уведомление о сумме налога

Да, но я одна!!! одна пргорамма, на один компьютер .
Как снять — нужно поравить документ????

ВСЕМ СПАСИБО!!, перезагрузила — ошибки ушли

При попытке изменения документа появляется сообщение Не удалось заблокировать запись…Объект уже заблокирован…сеанс такой-то дата утро. На кластере сервера нет такого сеанса, в блокировках — есть, все поля пустые кроме колонок «Блокировка» и «Заблокировано в».

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

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

утром были сбои на сервере 1С у всех. Сейчас работа наладилась. Из-за одного документа одного пользователя опять прерывать работу всех не хочется. На SQL сервере убил процесс, созданный  примерно в это время, не помогло. Есть какие-нибудь средства 1С или SQL для снятия такой блокировки?

Тэги:

Комментарии доступны только авторизированным пользователям

  1. 14.01.2020, 12:13

    #1

    mcmurphy) вне форума


    Гость форума


    По умолчанию Ошибки после перехода на новую платформу

    Добрый день.
    Имеется: WinServer 2016 Standart + Microsoft SQL Server 2008 R2, Типовые конфигурации БП 3.0 и ЗУП 3.1, платформа 8.3.13.1926.
    Проблема: после установки новой платформы не важно какого релиза 8.3.14…. 8.3.15…. 8.3.16…. появляются ошибки при проведении корректировок реализации, появляются десятки, сотни фоновых заданий и соединений в кластере 1С, которые после удалению плодятся снова и снова. Ошибки такие в БД такие:
    «Невосстановимая ошибка. Ошибка при выполнении запроса POST к ресурсу /e1cib/misc».
    «На сервере 1С: предприятия проишла неисправимая ошибка, приложение будет закрыто»
    «Не удалось заблокировать запись. Ошибка блокировки обьекта, обьект уже заблокирован пользователем Admin», — хотя я и работаю под этим пользователем, но документ не открывал, а ошибка говорит обратное.

    Наверное большинство релизов платформ перепробовали, и всегда глюки такие. Пришлось вернуться на платформу 8.3.13.1926, где проблем не обнаружено.

    Может кто-нибудь сталкивался с подобным или есть идеи?
    Спасибо.


  2. 16.01.2020, 12:44

    #2

    dimbor2 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибки после перехода на новую платформу

    Та же ерунда. Такие же симптомы и ошибки. Только первую не видел, возможно просто не хватило терпения. Сервер линуксовый, постгрес. Прет какой-то сплошной select по всем базам при отсутствии подключений. Непонятная фоновая возня и процы жрутся. Остановился на 8.3.15.1830 — хоть ошибок нет . 1ч пошла вразнос. Тоже замер в недоумении.


  3. 16.01.2020, 16:00

    #3

    mcmurphy) вне форума


    Гость форума


    По умолчанию Re: Ошибки после перехода на новую платформу

    Цитата Сообщение от dimbor2
    Посмотреть сообщение

    Та же ерунда. Такие же симптомы и ошибки. Только первую не видел, возможно просто не хватило терпения. Сервер линуксовый, постгрес. Прет какой-то сплошной select по всем базам при отсутствии подключений. Непонятная фоновая возня и процы жрутся. Остановился на 8.3.15.1830 — хоть ошибок нет . 1ч пошла вразнос. Тоже замер в недоумении.

    А вы серверный кэш 1С не чистили? Сеансовый который, хранится тут: «C:Program Files1cv8srvinforeg_1541snccntx+n» ? На одном ресурсе просто подсказали попробовать.
    Версию 8.3.15.1830 кстати, как раз и не ставили. Надеюсь, что эта версия будет рабочей. Самое главное, чтобы сервер фоновыми соединениями не загружался и документы проводились, а то рабочий процесс из-за этого встает.


  4. 16.01.2020, 19:26

    #4

    dimbor2 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибки после перехода на новую платформу

    Серверный кэш (и все клиентские) при смене платформы полностью чистится в обязаловку. Наступал без этого на отказ стартовать, т.ч.вошло в привычку.
    1830 по совпадению (случайному ли?) указана сейчас как минимально необходимая для БП 3. Если б не эти наглые требования, обновляться бы не полезли. Работает — не трогай. Это очень хороший жизненный закон.


  5. 20.01.2020, 11:34

    #5

    mcmurphy) вне форума


    Гость форума


    По умолчанию Re: Ошибки после перехода на новую платформу

    Доброго дня.
    Удалось поставить новую платформу 8.3.15.1830 только после очистки серверного кэша 1с, в папке: «C:Program Files1cv8srvinforeg_1541snccntx».
    Фоновой фигни и ошибок нет, вроде все отлично.


  6. 20.01.2020, 14:15

    #6

    dimbor2 вне форума


    Пришел за помощью


    По умолчанию Re: Ошибки после перехода на новую платформу

    Ну да. Мои «питомцы» тоже жаловаться перестали. Но на самом деле, говоря цинично: Хорошо ,что она и у вас на виндовсе засбоила. Глядишь, через релиз — другой они там в 1ч одумаются и починят. Чисто линуксовые глюки могут тянуться годами.


  7. 17.02.2020, 09:21

    #7

    _GoPHeR_ вне форума


    Гость форума


    По умолчанию Re: Ошибки после перехода на новую платформу

    Я поменял платформу на сервере и клиенте, вроде перестала такая ошибка лезть.


Ошибка выполнения запроса по причине не удалось заблокировать таблицу

Ошибка конфликта блокировок — одна из распространенных ошибок, возникающих в момент одновременной записи одного видов объекта несколькими пользователями. В данном случае, где-то производится запись объекта, а мы выполняем выборку данных, заблокированных для изменения.

ne-udalos-zablokirovat-tablitsu

Куда смотреть, если конфликт блокировок не проходит?

  • Бывает, в момент проведения приложение выводит модальное окно:  например, «Предупреждение»,  до тех пор, пока это окно висит, а транзакция не зафиксирована, будет возникать ошибка блокировки. Следует проверить у всех пользователей: нет ли таких ошибок.
  • Если вы программист и в процессе отладки поставили точку останова в модуле проведения, то также пока вы не продолжите код, остальные пользователи не смогут записать связанный с вашей блокировкой объект. Такие остановки на рабочих базах необходимо производить кратковременно.
  • Если производится процедура закрытия месяца, расчета себестоимости, то необходимо просто подождать, ведь такие ресурсоемкие операции производтся не так часто, если это критично, то выполнять их следует в нерабочее время. Это ж относится к операциям группового перепроведения.
  • Блокировки могут возникать в момент обмена между информационными базами (распределенными или при обмне торговли с бухгалтерией). Тут, следует обратить внимание принимаются ли подтверждения об отправляемых данных, возможно одни и теже данные посылаются постоянно, хотя они уже не меняются. Вариантом решения, когда данные приходят корректно — более частый обмен. Меньшие порции грузятся быстрее. Если ваши данные не пересекаются, то можно расмотреть вариант обмена в нерабочее время  — в обед, ночью, утром (снижается актуальность).
  • Если у вас база файловая, то такие конфликты происходят чаще, если это влияет на производительность, то следует подумать о клиент-серверном варианте
  • Установленный postrgres сервер выполнял запросы значительно медленней, чем даже бесплатная экспресс версия от Microsoft, пришлось откатиться на нее обратно.
  • На клиент серверной версии в консоли сервера можно посмотреть пользователя, который захватил больше всего объектов. Случается при формирование очень большой выборки 1С «зависает», пользователь закрывает 1С, но запрос продолжает свое выполнение. Удаление его из консоли гораздо быстрее решает проблемуkolonki-soedineniya-s-subd
  • Файловая база в терминальном режиме работает быстрее, чем просто по сети, даже если сетка быстрая, кэширование диска выполняет свою функцию
  • ssd диски ускоряют запись, если у вас не специализированный сервер с 10 Raid, а обычный диск, то переход к ssd верное решение для нагруженных систем.
  • На более производительных серверах проблема возникает реже.
  • Настройка ограничений на проверяемые файлы в антивирусе, может снизить нагрузку на сервер и его диск
  • Использование ограничения на уровне записей, негативно сказывается на производительности, иногда из этого вытекает проблема конфликта блокировок
  • Реиндексация таблиц информационной базы может исправить ошибки, влияющие на производительность
  • Для более детального исследования проблемы можно использовать технологический журнал от 1С — специальный механизм, записывающий запросы и другие события в работе системы.

Единственные настоящие поэты нашего времени служат в рекламных агентствах.

При попытке изменения документа появляется сообщение Не удалось заблокировать запись…Объект уже заблокирован…сеанс такой-то дата утро. На кластере сервера нет такого сеанса, в блокировках — есть, все поля пустые кроме колонок «Блокировка» и «Заблокировано в».

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

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

утром были сбои на сервере 1С у всех. Сейчас работа наладилась. Из-за одного документа одного пользователя опять прерывать работу всех не хочется. На SQL сервере убил процесс, созданный  примерно в это время, не помогло. Есть какие-нибудь средства 1С или SQL для снятия такой блокировки?

Тэги:

Комментарии доступны только авторизированным пользователям

Транзакция — это неделимая, с точки зрения воздействия на базу данных, последовательность операций манипулирования данными, выполняющаяся по принципу «все или ничего», и переводящая базу данных из одного целостного состояния в другое целостное состояние.

Если по каким-либо причинам одно из действий транзакции невыполнимо или произошло какое-либо нарушение работы системы, база данных возвращается в то состояние, которое было до начала транзакции (происходит откат транзакции).

Блокировка (в общем случае) — это информация о том, что данный ресурс «захвачен» кем-то для выполнения какого-то действия.

Суть блокировки:

  • запрет некоторых действий над общим ресурсом на некоторое ограниченное время.

В силу различных причин блокировки могут быть:

  1. необходимыми («хорошими») — благодаря им обеспечивается предсказуемость действий пользователей, целостность и непротиворечивость данных;
  2. избыточными («плохими»).

В системе 1С:Предприятие 8 различают:

  • объектные блокировки (позволяют осуществлять конкурентный доступ пользователей к данным 1С:Предприятия в терминах объектов информационной базы, например, при интерактивной работе пользователей в формах: редактировании существующих объектов, удалении, создании новых и др.);
  • транзакционные блокировки (обеспечивают конкурентный доступ к данным в целях целостности и непротиворечивости хранимых данных).

Виды блокировок объектов базы данных 1С:

  1. объектная пессимистическая;
  2. объектная оптимистическая;

Объектная пессимистическая блокировка

Пессимистическая блокировка объектов базы данных предназначена для запрета изменения данных определенного объекта другими сеансами или данным сеансом до тех пор, пока блокировка не будет снята этим объектом встроенного языка.

При этом блокировка данных для редактирования не запрещает запись заблокированных данных в других пользовательских сеансах (или в других экземплярах объекта в этом же сеансе), а лишь не позволяет нескольким объектам одновременно установить блокировку одних и тех же данных.

Пессимистическая блокировка объектов базы данных:

  • используется системой 1С:Предприятие для блокировки объектов, редактируемых в форме;
  • устанавливается:
    1. автоматически — в момент начала модификации объекта в форме, указанного в качестве основного реквизита формы (при этом если другой пользователь попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект);
    2. программно — метод объектов Заблокировать() или метод глобального контекста ЗаблокироватьДанныеДляРедактирования().
  • снимается, когда пользователь, редактировавший объект, закроет форму объекта.

Пример

Отсюда

Войдем в информационную базу под пользователем Иванов, откроем форму элемента 1С:Предприятие 8.0. Управление торговлей справочника Номенклатура (код 12) и изменим цену продажи с 420,00 на 450,00Не сохраняя сделанные изменения, войдем в информационную базу еще раз, но теперь под именем пользователя Петров. Откроем форму того же элемента справочника и попробуем изменить значение какого-либо реквизита. Любая попытка изменения приведет к появлению специального окна с сообщением об ошибке:

Пессимистическая блокировка 1С

[свернуть]

Таким образом пессимистическая блокировка гарантирует, что пользователь, начав изменять данные объекта, сможет записать эти изменения в информационную базу.

Использование объектной пессимистической блокировки

Прежде чем изменять существующий объект информационной базы из кода на встроенном языке, следует предварительно его заблокировать (установить «блокировку данных для редактирования» или «объектную блокировку»), тем самым:

  1. убедиться, не заблокирован ли он другими объектами;
  2. попытаться предотвратить его изменение другими пользовательскими сеансами (или другими экземплярами объекта в этом же сеансе).

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

Примеры

Отсюда

Пример № 1.

Требуется заблокировать объект и, если это удалось, модифицировать данные. В противном случае – проинформировать пользователя об отказе в выполнении операции с помощью сообщения вида:

«Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено. Ошибка блокировки объекта. Объект уже заблокирован: компьютер: <имя компьютера>, пользователь: <имя пользователя>, сеанс: <номер сеанса>, начат: <дата и время>, приложение: <тип клиентского приложения>».

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();

// Выполнить блокировку объекта от изменения другими режимами

// или пользователями; в случае блокировки — 

// вывести пользователю сообщение об исключении.

ФайлОбъект.Заблокировать(); 

// Затем изменить и записать объект

ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();

ФайлОбъект.Записать();

Аналогичным образом, можно воспользоваться методом глобального контекста ЗаблокироватьДанныеДляРедактирования:

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();

// Выполнить блокировку объекта от изменения другими режимами

// или пользователями; в случае блокировки — 

// вывести пользователю сообщение об исключении.

ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка); 

// Затем изменить и записать объект

ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();

ФайлОбъект.Записать();

Пример № 2.

Требуется пропустить обработку объекта, если он заблокирован для редактирования. При очередном вызове процедуры (например, из фонового или регламентного задания) будет предпринята повторная попытка изменения объекта.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Объект = ТекущаяВерсия.ПолучитьОбъект();

// Выполнить блокировку объекта от изменения другими режимами

// или пользователями

УстановитьПолноеНаименование = Истина;

Попытка 

ФайлОбъект.Заблокировать();

Исключение

// в случае блокировки — не выполнять изменение объекта

УстановитьПолноеНаименование = Ложь;

// записать предупреждение в журнал регистрации

ЗаписьЖурналаРегистрации(НСтр(«ru = ‘Фоновое обновление имен файлов'», Метаданные.ОсновнойЯзык.КодЯзыка),

УровеньЖурналаРегистрации.Предупреждение,, ФайлОбъект, ОписаниеОшибки());

КонецПопытки;

// Пропустить обработку объекта, если он заблокирован.

Если УстановитьПолноеНаименование Тогда

  Объект.ПолноеНаименование = ПолноеНаименование;

  Объект.Записать();

КонецЕсли;

[свернуть]

Не следует проверять блокировку объектов для редактирования в следующих случаях:

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

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

ВАЖНО! Объектные блокировки не влияют на операции над данными и на процесс течения транзакций (они расположены на другом уровне работы с данными):

  1. если блокировка объекта вызвала исключение, то оно может быть обработано разработчиком конфигурации и не приведет к обязательному откату транзакции;
  2. блокировки объектов, установленные в течение транзакции, сохраняются при фиксации транзакции и снимаются при откате транзакции.

Объектная оптимистическая блокировка

Оптимистическая блокировка запрещает запись объекта в базу данных, если после считывания объекта он был изменен в базе данных другими сеансами или другими программными объектами этого же сеанса.

Таким образом оптимистическая блокировка гарантирует, что пользователь изменяет актуальные данные объекта, которые хранятся в информационной базе, а не какой-то их предыдущий вариант.

Фактически, оптимистическая блокировка представляет собой проверку, которая выполняется перед записью объекта в базу данных. Эта проверка построена на анализе номера версии объекта, хранящейся в базе данных и номера версии, помещенной в память компьютера в момент считывания данных из информационной базы. Если при записи объекта номера его версий отличаются, то будет выдано предупреждение о том, что версия объекта изменилась или он был удален, то есть сработает оптимистическая блокировка.

Примеры

Отсюда

Рассмотрим пример. Откроем два сеанса работы с прилагаемой к работе информационной базой: один под пользователем Иванов, а другой — под пользователем Петров. В обоих сеансах откроем откроем форму элемента Управление торговлей справочника Номенклатура (код 12). Теперь в сеансе, открытом от имени пользователя Иванов, изменим цену продажи с 420,00 на 450,00 и запишем сделанные изменения. После этого, в сеансе, открытом от имени пользователя Петров попробуем изменить значение какого-либо реквизита. Любая попытка изменения приведет к появлению другого окна с сообщением об ошибке:

[свернуть]

Механизм транзакционных блокировок

Возможные проблемы при многопользовательском доступе к одним и тем же данным

Подробнее…

Работа в многопользовательской среде требует соблюдения определенного компромисса между требованиями предсказуемости, целостности и непротиворечивости данных информационной базы и требованиями параллельности работы.

Как известно, при одновременном чтении и изменении одних и тех же данных конкурирующими транзакциями могут возникнуть следующие проблемы одновременного доступа:

  1. Проблема потерянного изменения (англ. The Lost Update Problem) — если две транзакции изменяют одни и те же данные, взяв в качестве первоисточника начальное значение этих данных, то в системе останутся изменения внесенные той транзакцией, которая записала свои изменения последней, поскольку эти изменения заменят собой все изменения, внесенные до этого. Вывод:
    • нельзя одновременно изменять одни и те же данные.
  2. Проблема «грязного» чтения (англ. The Uncommitted Dependency Problem) — если одна транзакция начнет считывать некоторые данные не дождавшись окончания внесения изменений, вносимых в эти данные другой транзакцией, то достаточно вероятен случай, когда прочитанные данные будут содержать неверную информацию. Вывод:
    • нельзя читать уже измененные, но еще не записанные данные.
  3. Проблема неповторяемого чтения (англ. The Inconsistent Analysis Problem) — если одна транзакция несколько раз считывает одни и те же данные, а вторая — вносит изменения в эти данные между циклами чтения данных первой транзакции, то при повторном считывании первая транзакция может получить другой набор данных. Вывод:
    • нельзя повторно читать измененные и записанные данные, если эти же самые данные уже были прочитаны до внесения в них изменений.
  4. Проблема чтения фантомов (англ. The Phantom Read Problem) — если первая транзакция считывает данные и потом на их основе осуществляет определенные действия, а вторая транзакция в этот момент добавляет в эти данные новую информацию, то как и в предыдущем случае это может привести к некорректному результату. Вывод:
    • нельзя вводить новые данные (удалить имеющиеся), если они могут попасть в уже один раз прочитанные данные при повторном чтении.

Строго говоря, список вышеперечисленных проблем не является окончательным.

[свернуть]

Уровни изоляции транзакций

Уровни изоляции транзакций в современных СУБД являются механизмом гибкой настройки ограничений, позволяющих:

  1. допустить параллельное выполнение транзакций ради увеличения производительности системы;
  2. обеспечить необходимую степень целостности данных (ограничить параллельность транзакций при работе с одними ресурсами).

Например, MS SQL Server 2000 позволяет использовать следующие уровни изоляции транзакции:

  • READ UNCOMMITED — незавершенное чтение. Низший уровень изоляции, обеспечивает максимальную параллельность выполнения транзакций. Данный уровень защищает изменяемые текущей (актуальной) транзакцией данные от изменений, которые могут внести конкурирующие транзакции. Если другой транзакции необходимо изменить те же самые данные, то она должна ожидать завершения изменения данных текущей (актуальной) транзакцией. Однако чтение данных разрешено. Таким образом этот уровень изоляции допускает чтение незавершенных изменений данных.
  • READ COMMITED —  обеспечивает запрет «грязного» чтения. Если текущая (актуальная) транзакция начала изменять данные, то конкурирующая транзакция не может не только изменить, но даже прочитать их до завершения изменений, вносимых текущей (актуальной) транзакцией. После того, как изменения, вносимые текущей (актуальной) транзакцией закончены, конкурирующие транзакции могут читать данные, не дожидаясь окончания текущей (актуальной) транзакции в целом. Таким образом решается проблема неповторяемого чтения.
  • REPEATABLE READ — обеспечивает повторяемость чтения данных. Если текущая (актуальная) транзакция начинает читать данные, то другая транзакция не может их изменить до окончания текущей (актуальной) транзакции.
  • SERIALIZABLE — последовательное выполнение. Этот уровень изоляции является максимальным и обеспечивает полную изоляцию транзакций друг от друга. Решаются все рассмотренные проблемы, включая проблему «фантомов».

В зависимости от используемого уровня изоляции, СУБД накладывает различные типы блокировок на различные объекты базы данных на различное время.

Режим автоматических блокировок

В режиме автоматических блокировок 1С:Предприятие целиком «полагается» на возможности, предоставляемые СУБД.

Такой подход позволяет разработчику не задумываться о достаточно сложных вопросах блокирования нужных данных в транзакции. Однако СУБД не имеет информации о логической структуре данных 1С:Предприятия, и платформе приходится использовать достаточно высокие уровни изоляции транзакций СУБД для того, чтобы обеспечить целостность и непротиворечивость данных:

  СУБД
   Файловая база данных  MS SQL Server  IBM DB2  PostgreSQL
 Вид блокировок  Таблиц  Записей  Записей  Таблиц
 Уровень изоляции транзакций  Serializable  Repeatable Read или Serializable  Serializable  Read Committed

Режим автоматических блокировок:

  1. может привести к возникновению избыточных блокировок;

  2. не позволяет достичь желаемой параллельности работы пользователей.

В клиент-серверном варианте блокировка данных происходит на уровне записей, однако может быть заблокирована и вся таблица целиком (например, в результате выбора СУБД неоптимального плана выполнения запроса).

Тип блокировок, устанавливаемых в том или ином случае, зависит от вида операции, используемого 1С:Предприятием уровня изоляции транзакций и определяется внутренними механизмами самой СУБД (например, MS SQL Server).

Режим управляемых блокировок

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

Управляемые блокировки 1С:Предприятия учитывают логическую структуру прикладного решения и поэтому позволяют максимально точно блокировать необходимые области данных (в отличие от использовавшихся ранее блокировок СУБД, которым не известна логическая структура системы). Таким образом менеджер управляемых блокировок позволяет избежать возникновения избыточных блокировок, блокируя только действительно необходимые области данных.

При работе в этом режиме система использует гораздо более низкий уровень изоляции транзакций для MS SQL Server и IBM DB2, и блокировку на уровне записей для PostgreSQL, что позволяет достичь более высокой параллельности работы пользователей:

  СУБД
   Файловая база данных  MS SQL Server  IBM DB2  PostgreSQL
 Вид блокировок  Таблиц  Записей  Записей  Записей
 Уровень изоляции транзакций  Serializable  Read Committed  Read Committed  Read Committed

Однако этот уровень изоляции транзакций СУБД уже не может сам по себе обеспечить целостность и непротиворечивость данных во всех случаях. Поэтому 1С:Предприятие 8 при модификации данных методами встроенного языка (например, метод Записать() у объектных данных) устанавливает собственные управляемые блокировки в транзакции, которые обрабатываются собственным менеджером транзакционных блокировок. Эти блокировки также могут быть установлены и разработчиком самостоятельно в тех местах кода, где требуется:

  • обеспечить неизменность считываемых в транзакции данных (разделяемая блокировка);
  • запретить чтение данных другими транзакциями (исключительная блокировка).

Порядок действия механизма управляемых блокировок:

  1. любой запрос к данным прежде всего обрабатывается собственным менеджером транзакционных блокировок 1С:Предприятия; если на уровне 1С:Предприятия конфликт управляемых блокировок не обнаруживается, то запрос передается далее, на исполнение СУБД;
  2. СУБД использует собственный механизм блокировок для определения конфликтующих транзакций, но уже с более низким уровнем изоляции транзакций, чем в режиме автоматических блокировок.

Установка режима управления блокировками для объектов конфигурации

В структуре объектов конфигурации существует несколько возможностей для задания режима управления блокировками:

  1. через свойство «Режим управления блокировкой данных» в палитре свойств конфигурации и(или) объекта;
  2. установка управляемых блокировок средствами встроенного языка.

Установка режима управления блокировками через свойство «Режим управления блокировкой данных» в палитре свойств конфигурации или объекта

Управление блокировками 1С

  • режим Автоматический используются автоматические блокировки, устанавливаемые СУБД. Собственный менеджер блокировок 1C:Предприятия не задействован.
  • режим Управляемый — система всегда самостоятельно устанавливает необходимые управляемые блокировки, обрабатываемые собственным менеджером транзакционных блокировок (независимо от того, какие режимы управления блокировками установлены для конкретных объектов конфигурации). Этот режим предназначен для работы всей конфигурации только с управляемыми блокировками в транзакции.
  • режим Автоматический и управляемый — для конкретного объекта конфигурации режим блокировки будет определяться значением свойства Режим управления блокировкой данных самого объекта конфигурации. Этот режим предназначен для постепенного или частичного перевода конфигурации в режим управляемых блокировок. Он позволяет отдельным объектам метаданных работать с управляемыми блокировками (например, наиболее «проблемным» документам и регистрам), в то время как остальные объекты работают в режиме автоматических блокировок.

Сочетания режимов управления блокировками в транзакции в режиме Автоматический и управляемый:

Режим существующей транзакции Режим начинаемой транзакции Результат
 Автоматический  Автоматический  Начинаемая транзакция будет выполнена в автоматическом режиме
 Управляемый  Управляемый  Начинаемая транзакция будет выполнена в управляемом режиме
 Автоматический  Управляемый  Начинаемая транзакция будет выполнена в автоматическом режиме
 Управляемый  Автоматический  Будет вызвана исключительная ситуация

Особенности режимов управления блокировками для документов

Транзакция, единая для пользователя может представлять собой несколько транзакций с точки зрения платформы.

Интерактивное проведение документа по регистру делает две транзакции:

  1. запись самого документа;
  2. внутри этой записи (транзакции) запись набора строк по регистру.

В зависимости от режима управления блокировками для самого документа и двигаемого им регистра, возможны четыре ситуации:

  1. Режим документа Автоматический, режим регистра Автоматический -> запись по регистру в автоматическом режиме
  2. Режим документа Управляемый, режим регистра Управляемый-> запись по регистру в управляемом режиме
  3. Режим документа Автоматический, режим регистра Управляемый -> запись по регистру в автоматическом режиме
  4. Режим документа Управляемый, режим регистра Автоматический -> исключительная ситуация (ошибка)

[свернуть]

Если, например, стоит задача повысить параллельность работы при проведении отдельного документа, не переводя при этом всю конфигурацию в управляемый режим, то последовательность действий должна быть следующей:

  1. свойство конфигурации Режим управления блокировкой данных необходимо установить в значение Автоматический и управляемый;
  2. свойство Режим управления блокировкой данных объекта метаданных документ необходимо установить в значение Управляемый;
  3. у всех регистров, по которым данный документ выполняет движения, следует установить свойство Режим управления блокировкой данных в значение Управляемый;
  4. проанализировать процедуру проведения документа на предмет наличия:
    • явных вызовов транзакций
    • неявных вызовов транзакций, которые выполняются системой при модификации данных каких-либо объектов конфигурации
  5. для найденных явных и неявных вызовов транзакций обеспечить их выполнение в управляемом режиме
    • для явных вызовов — параметр метода НачатьТранзакцию();
    • для неявных вызовов — свойство Режим управления блокировкой данных модифицируемого объекта конфигурации;
  6. в теле процедуры проведения документа установить необходимые управляемые блокировки.

Установка управляемых блокировок средствами встроенного языка

Средствами встроенного языка установка управляемых блокировок внутри явной или скрытой (неявной) транзакции происходит с помощью специального объекта БлокировкаДанных,  который предназначен для явной блокировки данных от чтения или изменения другими сессиями.

Управление блокировкой данных средствами встроенного языкаОписание доступных свойств и методов которого можно посмотреть в синтакс-помощнике в ветви «Общие объекты» — «Управление блокировкой данных».

Новый экземпляр данного объекта может быть создан с помощью одноименного конструктора и представляет собой коллекцию элементов блокировки данных. Изначально эта коллекция пуста и задача разработчика состоит в добавлении в эту коллекцию некоторого количества элементов блокировки.

При добавлении нового элемента блокировки для него необходимо указать пространство блокировок, которое будет блокировать данный элемент. Пространства блокировок определены в платформе 1С:Предприятия 8.1 и соответствуют структуре прикладных объектов конфигурации.

Допустимы следующие имена пространств блокировок и имена полей пространств блокировок:

  • для объектных данных (справочник, документ и др.) определено единственное пространство блокировки — сам объект данных;
  • для необъектных данных (например, регистры) определено по два пространства блокировок, которые имеют разный логический смысл.

Перечень допустимых имен

  Имя пространства блокировок Поля пространства блокировок
 Справочник.<имя>  Ссылка
 Документ.<имя>   Ссылка
 ПланОбмена.<имя>   Ссылка
 ПланСчетов.<имя>   Ссылка
 БизнеcПроцесс.<имя>   Ссылка
 Задача.<имя>   Ссылка
 ПланВидовРасчета.<имя>   Ссылка
 ПланВидовХарактеристик.<имя>   Ссылка
 РегистрСведений.<имя>.НаборЗаписей — только для регистра сведений, подчиненного регистратору  Регистратор
 РегистрСведений.<имя>  Период — если есть;
<имя измерения>
 РегистрНакопления.<имя>.НаборЗаписей  Регистратор
 РегистрНакопления.<имя> Период;
<имя измерения>
 РегистрБухгалтерии.<имя>.НаборЗаписей  Регистратор
 РегистрБухгалтерии.<имя>  Период;
<вид движения> — значение системного перечисления ВидДвиженияБухгалтерии;
Счет — обязательное поле;
Субконто;
<вид субконто>;
<имя измерения>
 РегистрРасчета.<имя>.НаборЗаписей  Регистратор
 РегистрРасчета.<имя>  ПериодРегистрации;
ПериодДействия;
<имя измерения>
 Перерасчет.<имя>.НаборЗаписей  ОбъектПерерасчета
 Перерасчет.<имя>  ВидРасчета
 Последовательность.<имя>.НаборЗаписей  Регистратор
 Последовательность.<имя>  <имя измерения>
 Константа.<имя>  

Пространство блокировок с суффиксом НаборЗаписей используется в тех случаях, когда необходимо заблокировать сами записи данного объекта (например, при добавлении новых записей).

Пространство блокировок без суффикса используется тогда, анализируются некоторые данные этого объекта (например, остатки регистра), или когда выполняются какие-либо операции, приводящие к изменению существующих данных объекта (например, восстановление границы последовательности).

[свернуть]

Порядок действий при установке управляемых блокировок средствами встроенного языка:

  1. добавить элемент блокировки, соответствующий некоторому пространству блокировок;
  2. установить для этого элемента режим блокировки (разделяемая или исключительная);
  3. определить значения полей блокировки (указать, какие же именно записи будут заблокированы — для каждого пространства блокировок в платформе определены имена полей, значения которых могут задаваться при установке тех или иных блокировок).

ВНИМАНИЕ!

Следует понимать, что, в данном случае речь не идет о реальных записях базы данных. Несмотря на то, что управляемые блокировки описываются в терминах объектов метаданных и их полей, эти блокировки никак не связаны с реальной структурой хранения данных 1С:Предприятия в СУБД. Это всего лишь записи о том, что заблокировано «нечто».

Иногда можно провести аналогию между управляемыми блокировками и реальными записями СУБД. Например, для объектных данных блокировка объекта с указанной ссылкой будет «соответствовать» блокировке всех записей, содержащих указанную ссылку, во всех таблицах этого объекта метаданных (в основной таблице и в таблицах его табличных частей).

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

При установке новых блокировок менеджер анализирует имеющиеся блокировки. Если оказывается, что «нечто», что мы пытаемся заблокировать, уже заблокировано ранее, сравниваются режимы существующей и новой блокировок. Если режимы совместимы — новая блокировка устанавливается. Если режимы не совместимы — новая блокировка ожидает снятия существующей блокировки.

[свернуть]

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

Для каждого пространства блокировок количество устанавливаемых условий не ограничено.

Способы задания условий на поля пространств блокировки

Существует два способа задания условий на поля пространств блокировки:

  1. с помощью явного задания имени поля и его значения;
  2. с помощью указания источника данных, содержащего необходимые значения.

Задание условий на поля пространств блокировки с помощью явного задания имени поля и его значения

При явном задании имени поля и его значения необходимо использовать метод УстановитьЗначение() объекта ЭлементБлокировкиДанных. В этом случае имя и значение указывают в качестве параметров метода, например так, как показано в листинге 1.

Листинг 1

Листинг 1. Пример установки условия блокировки записей с помощью явного указания имени поля и его значения

// Создать объект блокировка данных

БлокировкаДанных = Новый БлокировкаДанных;

// Добавить новый элемент блокировки, блокирующий «нечто» в данных регистра накопления Остатки номенклатуры

ЭлементБлокировки = БлокировкаДанных.Добавить(«РегистрНакопления.ОстаткиНоменклатуры»);

// Установить режим блокировки — исключительный. Другие транзакции, устанавливающие управляемые блокировки, не смогут даже начать чтение этих данных

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

// Указать, что именно мы блокируем в данных регистра Остатки номенклатуры — все «записи», у которых значение измерения Склад равно значению, содержащемуся в переменной Склад

ЭлементБлокировки.УстановитьЗначение(«Склад», Склад);

[свернуть]

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

Листинг 2

Листинг 2. Пример установки условия блокировки записей с помощью задания диапазона

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// Создать объект блокировка данных

БлокировкаДанных = Новый БлокировкаДанных;

// Добавить новый элемент блокировки, блокирующий «нечто» в данных регистра накопления Продажи

ЭлементБлокировки = БлокировкаДанных.Добавить(«РегистрНакопления.Продажи»);

// Установить режим блокировки — разделяемый. Эти данные гарантировано не будут изменены другими транзакциями до окончания существующей транзакции

ЭлементБлокировки.Режим = РежимБлокировкиДанных. Разделяемый;

// Указать, что именно мы блокируем в данных регистра Продажи — все «записи», у которых значение измерения Контрагент равно значению, содержащемуся в переменной Контрагент

ЭлементБлокировки.УстановитьЗначение(«Контрагент», Контрагент);

// Создать объект Диапазон, описывающих интервал от начала месяца, к которому принадлежит указанная дата, до указанной даты

Диапазон = Новый Диапазон(НачалоМесяца(Дата), Дата);

// Указать, что именно мы блокируем в данных регистра Продажи — все «записи», у которых значение измерения Контрагент равно значению, содержащемуся в переменной Контрагент, и значение поля Период содержится в указанном диапазоне

ЭлементБлокировки.УстановитьЗначение(«Период», Диапазон);

[свернуть]

Задание условий на поля пространств блокировки с помощью указания источника данных, содержащего необходимые значения

При указании источника данных сначала необходимо задать свойство ИсточникДанных объекта ЭлементБлокировкиДанных, после чего, используя метод ИспользоватьИзИсточникаДанных(), настроить соответствие полей области блокировки данных полям источника данных (листинг 3).

Листинг 3

Листинг 3. Пример установки условия блокировки записей с помощью источника данных

БлокировкаДанных = Новый БлокировкаДанных;

// Добавить новый элемент блокировки, блокирующий «нечто» в данных регистра накопления Остатки номенклатуры

ЭлементБлокировки = БлокировкаДанных.Добавить(«РегистрНакопления.ОстаткиНоменклатуры»);

// Установить режим блокировки — исключительный. Другие транзакции, устанавливающие управляемые блокировки, не смогут даже начать чтение этих данных

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

// Указать, что именно мы блокируем в данных регистра Остатки номенклатуры — все «записи», у которых значение измерения Склад равно значению, содержащемуся в переменной Склад

ЭлементБлокировки.УстановитьЗначение(«Склад», Склад);

// Указать источник данных, который содержит данные для установки ограничений на другие поля этого элемента блокировки — в данном случае таблица значений СписокНоменклатуры

ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; 

// Указать, что именно мы блокируем в данных регистра Остатки номенклатуры — все «записи», у которых значение измерения Склад равно значению, содержащемуся в переменной Склад, и у которых значение измерения Номенклатура равно какому-либо значению, содержащемуся в колонке Номенклатура указанного источника данных

ЭлементБлокировки.ИспользоватьИзИсточникаДанных(«Номенклатура», «Номенклатура»);

[свернуть]

В качестве источника данных можно указывать:

  • результат запроса;
  • табличную часть;
  • набор записей;
  • таблицу значений.

При установке соответствия полей, именами полей источника будут являться имена колонок результата запроса, имена реквизитов табличной части, имена измерений или имена колонок таблицы значений соответственно.

Объект Диапазон также может являться значением поля источника данных.


Для установки всех созданных блокировок используется метод объекта БлокировкаДанных — Заблокировать():

  • Если метод выполняется внутри транзакции (явной или неявной), то блокировки устанавливаются в момент вызова метода. При окончании транзакции они будут сняты автоматически.
  • Если же метод Заблокировать() выполняется вне транзакции, то блокировки установлены не будут.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с ошибка не обнаружена установленная версия 1с предприятия
  • 1с ошибка при установке значения атрибута контекста картинка
  • 1с ошибка при установке значения атрибута контекста имякоманды
  • 1с ошибка нарушение целостности системы что делать
  • 1с ошибка при установке значения атрибута контекста значение

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: