Ошибка блокировки объекта как исправить

Показывать по
10
20
40
сообщений

Новая тема

Ответить

ООО Горизонт

Дата регистрации: 06.06.2017
Сообщений: 7

Платформа 1С предприятия 8.3.10.2561, конфигурация 3.0.52.39 Режим веб-сервер, кол-во оперативы сервера 16 Гб.
При повторном открытии и корректировки проведенного документа появляется сообщение:»Ошибка блокировки объекта.Объект уже заблокирован»

Как бороться?

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20833

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

ООО Горизонт

Дата регистрации: 06.06.2017
Сообщений: 7

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

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20833

ООО Горизонт, перезапустите WEB сервер, объект должен освободиться.

ООО Горизонт

Дата регистрации: 06.06.2017
Сообщений: 7

Prikum, спасибо, но это немного не то, вылетят все пользователи из базы, а это никому не нужно, кроме того такая ситуация возникает уже не в первый раз…

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20833

ООО Горизонт, Так у Вас зависла сессия на вэб-сервере, может быть пользователь отключился не выйдя из программы, может быть что то еще, теперь только перезагружать.

Показывать по
10
20
40
сообщений

Объект уже заблокирован

Я

  

jamesgold

08.11.18 — 12:06

Добрый день, прошу помочь!

При добавлении ведомости и проведении выдает ошибку.

2222

Групповой обработкой тоже не дает добавить ведомость. Ошибку выдает под любыми правами, документ больше нигде не открыт.

  

zak555

1 — 08.11.18 — 12:08

закрой 1с и попробуй снова

  

Mankubus

2 — 08.11.18 — 12:09

(0) перезагрузи службу сервера

  

jamesgold

3 — 08.11.18 — 12:15

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

  

jamesgold

4 — 08.11.18 — 12:19

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{ОбщийМодуль.УправлениеСвойствами.Модуль(1125)}: Ошибка при вызове метода контекста (ЗаблокироватьДанныеДляРедактирования)

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

по причине:

Ошибка блокировки объекта. Объект уже заблокирован:

  

Cyberhawk

5 — 08.11.18 — 12:20

Меняй платформу

  

jamesgold

6 — 08.11.18 — 12:22

Обновляю на последний релиз БП, но думаю тож не поможет. Платформа одна из последних 8.3.12.1595

  

jamesgold

7 — 08.11.18 — 12:30

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

  

Sasha_H

8 — 08.11.18 — 12:32

(7) повесь исправление на расширение и все дела.!

  

youalex

9 — 08.11.18 — 12:34

(0) сеанс 4 — текущий?

  

jamesgold

10 — 08.11.18 — 12:35

Да с расширением хорошая идея, согласен! Меня смущает что похоже только у меня такой баг.

  

jamesgold

11 — 08.11.18 — 12:35

(9) Текущий

  

youalex

12 — 08.11.18 — 12:42

(11) может все-таки он реально заблокирован. Открыта форма или нет, здесь не играет.

Можно замером посмотреть, было ли еще ЗаблокироватьДанныеДляРедактирования.

  

jamesgold

13 — 08.11.18 — 12:52

Не дает добавить ведомость не в один из документов выдача наличных — заблокированы все. Переоткрытие 1с, перегрузка сервера 1с не помогаеют.

  

Cyberhawk

14 — 08.11.18 — 12:53

Под другим пользователем ИБ проверь

  

Cyberhawk

15 — 08.11.18 — 12:53

И пользователем ОС

  

1Сергей

16 — 08.11.18 — 12:53

(13) повисших сеансов тоже нет?

  

jamesgold

17 — 08.11.18 — 12:55

(14) Под несколькими пробовал проводить

(16) Рестарт сервера 1с каждую ночь, все скидываются

  

Cyberhawk

18 — 08.11.18 — 12:57

Перенеси базу в другой кластер (центральный сервер которого на другом порту и с другим каталогом который будет работать). А то может в базу лазят с двух серверов приложений.

  

jamesgold

19 — 08.11.18 — 13:13

(18) Можно было бы на файловой тогда, но не выгрузится там размер таблиц большой

  

jamesgold

20 — 08.11.18 — 13:48

(18) Перенес на другой сервер, восстановил из бекапа, — таже ошибка

  

Cyberhawk

21 — 08.11.18 — 13:50

Ну тогда мой первый совет в помощь

  

jamesgold

22 — 08.11.18 — 13:54

(21) Хорошо сейчас на другой платформе проведу документ.

  

jamesgold

23 — 08.11.18 — 15:03

на 8.3.10.2252 таже ошибка

  

jamesgold

24 — 08.11.18 — 15:37

Тема актуальна, есть еще идеи?

  

youalex

25 — 08.11.18 — 15:39

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

  

МимохожийОднако

26 — 08.11.18 — 15:41

(24) 8.3.12 ))

  

youalex

27 — 08.11.18 — 15:42

+ поиграться с РазблокироватьДанныеДляРедактирования() — повтыкать его в разные места через расширение — сначала непосредственно перед Заблокировать…

  

jamesgold

28 — 08.11.18 — 15:53

В итоге доработал код — заработало, странно что проблема только у меня

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

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

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

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

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

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

  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. Пример установки условия блокировки записей с помощью источника данных

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

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

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

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

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

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

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

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

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

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

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

[свернуть]

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

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

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

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


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

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

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

Я

Тимак

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) Это был сарказм.

Вы попали на нужную страницу – мы консультируем по вопросам 1С:Предприятие! Скорее всего, утром вы обнаружили, что любимая 1С 8.3 не запускается с сообщением: «Начало сеанса с информационной базой запрещено. Для выполнения резервного копирования…».

Если вы далеки от технической стороны работы с конфигурацией, обратитесь к нашим специалистам за устранением блокировок 1С. Но если вы решили справиться с проблемой самостоятельно, первое, что сейчас нужно сделать — срочно разрешить работу пользователям. После этого спокойно дочитайте статью до конца и узнайте, почему так произошло и что такое «Блокировка и снятие блокировки с информационной базы 1С 8.3».

Мой опыт подсказывает, что вы – пользователь (не системный администратор и не программист*), а ваша информационная база – файловая (если база SQL, вашей проблемой уже занимаются специалисты). Для начала надо понять, в какой папке (каталоге) она расположена и удалить в этой папке один файл — 1Сv8.cdn (файл можно не сохранять, он больше не понадобится).

*Если вы ИТ-специалист, можете смело переходить к чтению раздела «Блокировка и снятие блокировки с информационной базы 1С».

В окне со списком информационных баз найдите свою базу (цифра 1 на иллюстрации ниже) и нажмите на нее один (и только один!) раз мышкой. Затем нажмите кнопку «Изменить» (цифра 2).

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

Если вы видите, что информационная база расположена на данном компьютере или в локальной сети — мой опыт не подвел – база файловая, и мы все делаем правильно. Скопируйте этот путь (цифры 3 и 4).

Рис.1 Разрешение работы пользователей

Рис.1 Разрешение работы пользователей

Теперь зайдите в эту папку.

На всякий случай, вот несколько вариантов запуска Проводника:

  • У вас Windows XP или Windows 7. Нажмите Пуск, Выполнить, вставьте ранее скопированное расположение информационной базы. Откроется Проводник.
  • У вас Windows 7. Но пункта «Выполнить» нет. Вставляйте расположение сразу после нажатия Пуск. Откроется Проводник.
  • У вас Windows 8 или Windows 10. Нажмите Пуск, в правом верхнем углу нажмите на Лупу, вставьте ранее скопированное расположение информационной базы, нажмите Enter. Откроется Проводник.

Рис.2 Запуск проводника

Рис.2 Запуск проводника
  • Найдите на панели задач желтую дискету и нажмите на нее. Вставьте расположение информационной базы в адресную строку в верхней части окна Проводника. (Правой кнопкой мыши на адресную строку, Изменить адрес, правой кнопкой еще раз на адресную строку, Вставить).

Рис.3 Внесение адреса в Проводнике

Рис.3 Внесение адреса в Проводнике

Рис.4 Изменение адреса ИБ

Рис.4 Изменение адреса ИБ
  • Универсальный способ для всех версий Windows и ее настроек. Нажмите на клавиатуре кнопку с флажком и, не отпуская ее, нажмите на клавиатуре латинскую R (или русскую К). Откроется окно «Выполнить», вставьте туда ранее скопированное расположение информационной базы и нажмите ОК.

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

Рис.5 Окно проводника с расположением информационной базы

Рис.5 Окно проводника с расположением информационной базы

В окне проводника найдите в списке файлов файл 1Сv8.cdn, нажмите на нем правой кнопкой мыши, выберите «Удалить», как показано на предыдущем рисунке.

Готово! Ваша «1С:Бухгалтерия» или «1С:Зарплата и управление персоналом» или «1С:Управление торговлей» снова запускаются.

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

Как установить блокировку?

Механизм блокировки информационной базы предназначен для завершения текущих открытых сеансов и предотвращения новых подключений. Расположение функционала блокировки в меню может различаться в зависимости от конфигурации. Например, в УТ, редакция 11 (11.3.3.163) это НСИ и администрирование, [Сервис] Блокировка работы пользователей. Альтернативный вариант: НСИ и администрирование, Поддержка и обслуживание, Блокировка работы пользователей. В УТ, редакция 10.3 (10.3.21.2) это Сервис, Пользователи, Блокировка установки соединений с информационной базой.

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

Рис.6 Устранение блокировки

Рис.6 Устранение блокировки

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

Рис.7 Окно «Блокировка работы пользователей»

Рис.7 Окно «Блокировка работы пользователей»

Поскольку вводится начало и окончание действия блокировки, необходимо быть крайне внимательным в этом диалоге и ввести информацию в явном виде. Если бы в диалоге была бы возможность ввести начало блокировки «через 15 минут» длительностью «на 20 минут», или хотя бы справочно отображались эти величины на основании абсолютного времени начала и окончания блокировки, то было бы сложно установить блокировку длительностью в год, как это может случиться при ошибке ввода даты-времени.

Параметр «Время начала» рекомендуется установить как текущая дата/время + время, необходимое пользователям на подготовку к выходу с сохранением редактируемых документов. Например, сейчас 9 ч 50 мин, даем 10 минут пользователям для сохранения их результатов. Итого время начала блокировки должно быть 10 ч 00 мин.

Время конца – можно не вводить, при этом блокировка объекта будет установлена бессрочно (навечно).

Код для разблокировки – однократный «пароль» на запуск «с нуля», вопреки установленной блокировке, который может понадобиться в некоторых случаях (будет сказано далее). Вводить и запоминать обязательно. Этот параметр в случае SQL-варианта информационной базы виден в оснастке «Администрирование серверов 1С предприятия» и называется там «Код разрешения».

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

Рис.8 Управление блокировкой финансов

Рис.8 Управление блокировкой финансов

Итак, после нажатия кнопки «Установить блокировку» и положительного ответа на подтверждение…

Рис.9 Подтверждение установки блокировки

Рис.9 Подтверждение установки блокировки

…вы вернетесь в предыдущее диалоговое окно, внешний вид которого изменился:

Рис.10 Окно с блокировкой

Рис.10 Окно с блокировкой

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

Рис.11 Предупреждение о запланированной блокировке

Рис.11 Предупреждение о запланированной блокировке

Запланирована? Быть может это как-то связано с регламентными заданиями?

Сработает ли запланированная блокировка работы пользователей, если установлена блокировка регламентных заданий? Да, сработает. Механизм блокировки не использует регламентные задания.

Что увидят пользователи и я сам?

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

Рис.12 Предупреждение для пользователей о запланированной блокировке

Рис.12 Предупреждение для пользователей о запланированной блокировке

Инициатор блокировки получает другое сообщение:

Рис.13 Сообщение об инициаторе

Рис.13 Сообщение об инициаторе

После начала действия блокировки в информационную базу нельзя будет зайти обычным способом. О том, как все-таки зайти, будет рассказано ниже. Обратите внимание, что диалог не содержит автоматического указания на время завершения блокировки, поэтому задача проинформировать пользователей о времени возобновления работы ложится на Администратора. Эту информацию можно указать в сообщении пользователю.

Рис.14 Ожидание запуска

Рис.14 Ожидание запуска

Бомба взрывается точно в назначенное время. Сирена воет до взрыва.

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

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

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

А точно взорвется?

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

Пользователь файловой ИБ, решивший, например, удалить документ, а затем пойти на обед, оставив на экране диалог «Пометить документ на удаление?», будет держать открытым соединение с информационной базой. Конечно, его сеанс завершится после обеда, после того, как он ответит «Да» или «Нет», но до этого момента вы будете видеть, что есть активные пользователи. При этом инициатор блокировки увидит сообщение:

Рис.15 Напоминание

Рис.15 Напоминание

В журнале регистрации появится сообщение о runtime-ошибке, которое следует интерпретировать не как runtime-ошибку, а как «не все пользователи завершили свои сеансы»:

Рис.16 Журнал регистрации

Рис.16 Журнал регистрации

Рис.17 Сообщение в журнале регистрации

Рис.17 Сообщение в журнале регистрации

И это не единственная причина, по которой блокировка может не сработать (cм. далее разделы «По чьим часам?» и «А как же мои пользователи во Владивостоке?»).

Модальный диалог в SQL-варианте информационной базы на управляемых формах

Сервер приложений 1С имеет возможность удалить сеанс несмотря на режим модального диалога. Интерфейс 1С и модальный диалог останутся у пользователя на экране, создавая видимость незавершенного сеанса, но на самом деле сеанс будет удален, а соединение с ИБ будет своевременно разорвано. При попытке продолжить работу пользователь увидит сообщение об ошибке «Сеанс отсутствует или удален» или «Сеанс работы завершен Администратором» в зависимости от нюансов.

Рис.18 Сообщение об ошибке

Рис.18 Сообщение об ошибке

Модальный диалог в SQL-варианте информационной базы на обычных формах

Сеансы пользователей завершаются.

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

Рис.19 Напоминание

Рис.19 Напоминание

Сработает ли блокировка, если установить блокировку и закрыть диалог?

Да

Сработает ли блокировка, если установить блокировку и сразу выйти из 1С (т.е. завершить сеанс 1С до начала действия блокировки)?

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

По чьим часам сработает блокировка, если время на компьютерах немного отличается?

Проблема рассинхронизации часов

При файловой ИБ каждый компьютер сам проверяет, имеется ли в ИБ установленный временной диапазон блокировки, и сравнивает его со своими локальными часами. От точности своих часов зависит, сможет ли данный компьютер осуществить завершение сеанса точно в нужное время. Если база блокируется с 10:00, для одного компьютера этот момент наступит раньше, а для другого – позже.

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

Кажется, что речь может идти о секундах, в крайнем случае, минутах. Но на самом деле, на компьютере может быть, например, не установлено обновление операционной системы, поддерживающее переход на сезонное (зимнее/летнее) время, и ошибка уже может составлять не секунды, а часы. Легко провести такой эксперимент: запланируйте блокировку на 10 утра длительностью полчаса, а на одном из компьютеров переведите время на час вперед – блокировка на него не подействует.

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

А как же мои пользователи во Владивостоке?

Проблема абсолютного времени при пользователях из разных часовых поясов

Временной диапазон блокировки сохраняется в информационной базе. Посмотрите на содержимое блокировочного файла 1Сv8.cdn (который создается в файловом варианте ИБ), в нем записано время начала блокировки 17.07.2017 13:59 в формате ГГГГММДДЧЧММСС без какого-либо указания на часовой пояс:

Рис.20 Содержимое блокировочного файла

Рис.20 Содержимое блокировочного файла

Без указания на часовой пояс было бы понятно, о каком абсолютном времени идет речь, если время всегда относилось бы к какому-то конкретному часовому поясу, например UTC+0. Но в базе сохраняется локальное время по часам компьютера, который являлся инициатором блокировки. Из какого часового пояса был этот компьютер – неизвестно, а значит неизвестно абсолютное время блокировки.

Если в Москве, в централизованной ИБ, вы устанавливаете блокировку в 13:59, и этот момент времени для московских пользователей находится в будущем, то у пользователей этой же ИБ во Владивостоке 13:59 было 7 часов назад. И в зависимости от технического решения, в соответствии с которым осуществляется работа с ИБ пользователей Владивостока, блокировка этих пользователей либо сработает, либо нет.

Какие могут быть технические решения, в которых блокировка будет работать неправильно для пользователей Владивостока? Те, при которых клиентская часть 1С получит время по Владивостоку, а не по Москве. Например, офисы связаны в локальную сеть по VPN, а клиентская часть 1С запускается с локального компьютера, имея время UTC+10. Но если они работают с базой через RDP-соединение или в режиме RemoteApp на московском сервере, запуская на этом сервере клиентскую часть 1С – все будет хорошо, т.к. она будет иметь время UTC+3.

Имеется ли проблемы рассинхронизации часов и часового пояса в случае SQL-варианта информационной базы?

Нет. В данном варианте есть «часы сервера», которые принимаются за эталон.

Выкинет ли меня из Конфигуратора, если я был в нем, а блокировка начала действовать?

Нет.

Можно ли будет зайти в Конфигуратор после начала действия блокировки?

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

Как снять блокировку?

В том же диалоге, в котором блокировка устанавливалась. Напоминаем, что после установки блокировки в нем вместо кнопки «Установить блокировку» кнопка «Снять блокировку».

В случае SQL-варианта ИБ снятие блокировки возможно также в оснастке «Администрирование серверов предприятия 1С». (см. далее)

Для чего нужен код разблокировки?

Для входа в ИБ в тот момент, когда действует блокировка. Ситуации, в которых это необходимо:

  • После установки блокировки был завершен сеанс работы с ИБ (вручную или в результате действия блокировки на самого инициатора), и требуется начать новый сеанс;
  • Время окончания блокировки по ошибке было не заполнено вообще;
  • Время окончания блокировки было заполнено ошибочно (например, был нечаянно введен следующий месяц или год);
  • Информационная база в SQL-варианте, и для отмены неверно установленной блокировки невозможно удалить файл 1Сv8.cdn в каталоге информационной базы.

В таком случае воспользуйтесь подсказкой, которая дается при запуске. Т.е. в окне со списком информационных баз нажмите «Изменить» и введите в дополнительные параметры запуска строку:

ENTERPRISE /F»Z:ОбменУТ 11″ /CРазрешитьРаботуПользователей /UC12345

… с учетом каталога расположения и кода разблокировки.

Рис.21 Редактирование ИБ

Рис.21 Редактирование ИБ

Данную строку лучше скопировать в буфер обмена и подправить в диалоге «Редактирование информационной базы». Если вы перепутали тип кавычек или русскую «С» и латинскую, то увидите сообщение об ошибке:

Рис.22 Сообщение об ошибке

Рис.22 Сообщение об ошибке

Рис.23 Сообщение об ошибке

Рис.23 Сообщение об ошибке

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

Что делать, если я не устанавливал блокировку, а SQL-база кем-то заблокирована? При этом я не знаю код разблокировки.

Блокировка информационной базы может устанавливаться самой конфигурацией на время создания архивной копии. Если процесс ее создания не был завершен нормально, SQL-база может остаться в состоянии блокировки. В этом случае необходим доступ к консоли (более правильно – оснастке) «Администрирование серверов 1С:Предприятия».

Где ее искать?

Оснастка «Администрирование серверов 1С:Предприятия» часто установлена на том же сервере, где развернут SQL server, а также где развернут сам «Сервер 1С» (или «Сервер приложений 1С»). Хотя это и не обязательно: SQL может быть установлен на одном компьютере, «Сервер приложений 1С» – на другом, а оснастку можно развернуть и на своей рабочей станции. С большой вероятностью успеха можно достигнуть, сделав следующее:

  • Подключитесь по RDP к серверу, который указан в строке Srvr=… используя свой доменный логин и пароль. При невозможности подключения попросите системного администратора добавить вас в группу пользователей удаленного рабочего стола. (В случае отказа в таких правах – разверните и настройте на рабочей станции оснастку «Администрирование серверов предприятия 1С»);

Рис.24 Администрирование серверов предприятия 1С

Рис.24 Администрирование серверов предприятия 1С
  • На сервере найдите оснастку «Администрирование серверов 1С:Предприятия»;

Рис.25 Администрирование серверов 1С:Предприятия

Рис.25 Администрирование серверов 1С:Предприятия
  • Запустите оснастку, разверните дерево до узла с вашей информационной базой;

Рис.26 Запуск оснастки

Рис.26 Запуск оснастки
  • В свойствах информационной базы снимите чекбокс «Блокировка начала сеансов включена» или исправьте время начала и конца блокировки или посмотрите «код разрешения» для входа в ИБ (он же «код для разблокировки» в диалоге установки блокировки).

Рис.27 Свойства ИБ

Рис.27 Свойства ИБ

Что делать, если все пользователи информационной базы SQL вышли, а запустить Конфигуратор по-прежнему нельзя, т.к. имеются активные пользователи?

В узле «Соединения» информационной базы, в правой части экрана можно удалить имеющиеся соединения.

Рис.28 Узел «Соединения» информационной базы

Рис.28 Узел «Соединения» информационной базы

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

Если у вас остались вопросы:

  • Можно ли работать по московскому времени, если вы арендуете сервер в Европе и не хотите зависеть от его часового пояса?
  • Как найти Сервер приложений 1С, если неизвестно, где он установлен?
  • Как развернуть оснастку «Администрирование серверов 1С:Предприятия» и как ее настроить?
  • Если в одной локальной сети несколько серверов приложений, как быть?
  • Как быть в случае кластерной системы? и т.д.

… наши сертифицированные консультанты по технологическим вопросам 1С с удовольствием на них ответят и предоставят консультации по вопросам 1С:Предприятие.

Здравствуйте! Возникла проблема с блокировками в 1с. Суть:
Сервер: Ubuntu 12.04х64, на нем апач, файловая база и сервер 1с (используется только для раздачи лицензий, субд нет). Настраивалось все по этому мануалу — http://plinks.ru/lin…u-12-04-i-vyshe
Конфигурация УНФ 1.4.5.25 (не изменялась).
Вроде все заработало, но возникла проблема с блокировкой заказ-наряда, т.е. создаю заказ-наряд, заполняю, сохраняю, провожу, закрываю. Потом открываю снова, но при попытке изменить появляется ошибка «ошибка блокировки объекта. объект уже заблокирован» и мой собственный сеанс указан. Позже выяснилось, что так происходит с каждым документом, причем в случайном порядке, т. е. документ может и не заблокироваться, но чаще блокируется. В базе нахожусь один. Подключался и через браузер и через тонкий клиент. Перезапуск клиента не помогает, только перезагрузка апаче, тогда блокировка снимается. Но опять.. достаточно пару раз — отредактировать, записать или перепровести и он снова заблокирован. Подскажите в чем может быть проблема?

1С-Предприятие крутится на удалённом терминальном сервере Windows Server 2016 с MS SQL Server 2016
Оперативной памяти занято меньше половины, процессор тоже не нагружен, при этом у разных пользователей время от времени разные документы оказываются заблокированы ими же.
У некоторых пользователей RemoteApp, у некоторых тонкий клиент на компьютере, некоторые через RDP.
Происходит следующее, пользователь создаёт заказ, закрывает его и подписывает, через некоторое время (несколько минут или больше) открывает чтобы отредактировать и видит сообщение «Ошибка блокировки объекта. Объект уже заблокирован тонкий клиент»
Компьютер, пользователь и сеанс этого же пользователя, других сеансов я в консоли не вижу.
Как быть? Куда смотреть? Что читать?


  • Вопрос задан

    более трёх лет назад

  • 3809 просмотров

Пригласить эксперта

Вероятнее всего, ошибка в программном коде здесь:

пользователь создаёт заказ, закрывает его и подписывает

На объекте «Заказ» в процессе выполнение этой самой «подписи» был вызван метод «Заблокировать()», однако по окончании операции забыли вызвать метод «Разблокировать()».

P.S. В любом случае, претензию следует адресовать разработчику конфигурации. А еще точнее — тому, кто делал функцию «подписать».

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

А магия в том, что при закрытии RemoteApp, клиент 1С не закрывается, и все открытые документы так же будут открыты. И пока вы не перезагрузите сервер, чтобы сбросить все сеансы, и не подойдете к пользователю чтобы наблюдать что он делает — вы не поймете что не так.

В общем мой совет, откажитесь от RemoteApp, перезагрузите сервак и наблюдайте что будет дальше на местах.

Как быть? Куда смотреть? Что читать?

Думаю стоит смотреть в сторону — RemoteApp он таким балуется.

Попробуй переустановить обнову.
Точно в сеансах не висят зависшие? При неверной настройке, пользователя может выкидывать из текущего сеанса, worker висит, пользователь логинится заново, пытаясь править то что уже открыто в другом worker process


  • Показать ещё
    Загружается…

24 июн. 2023, в 23:21

5000 руб./за проект

24 июн. 2023, в 21:49

1000 руб./за проект

24 июн. 2023, в 18:21

30000 руб./за проект

Минуточку внимания

 

Виталий

Заглянувший

Сообщений: 141
Авторитет:

0

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

При переходе на платформу 8.3.15.1830 стала возникать ошибка блокировки. Появляется в момент когда документ или элемент справочника открыли 2 пользователя и один начинает записывать. При этом выдает сообщение о блокировки и 2 варианта Завершить или Перезапустить 1С. Раньше была просто кнопка ОК и можно продолжать работать.
Это особенность новой платформы или можно избежать как-то?
режим совместимости изменить или в коде прописать?

 

Виталий

Заглянувший

Сообщений: 141
Авторитет:

0

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

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

 

Светлана Сулименко

Посетитель

Сообщений: 8926
Авторитет:

265

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

#3



0


22.01.2020 09:17:50

Виталий, мы не тестировали работу Альфа-Авто на указанной версии платформы 1С, рекомендуемая версия платформы 1С для актуального релиза (5,1,18,07) 8,3,14,1779.

  • Ошибка блокировки метаданных возможно данные используются другой задачей
  • Ошибка блокировки информационной базы для конфигурирования
  • Ошибка блокировки дверцы стиральной машины
  • Ошибка блокировки данных возможно данные используются другой задачей 1с
  • Ошибка блокировки гидротрансформатора al4