Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

1C 8 платформа. Блокировки данных

newbie2010
читатель
офлайн
Дата регистрации: 17.11.2009
Сообщений: 15
Пост №1
 
17.02.2010 22:46

"Здравствуйте, друзья!<br>Вопрос о блокировках.<br>Правильно ли выбирать данные запросом (с параметром ДЛЯ ИЗМЕНЕНИЯ) для последующей их обработки. А затем записывать их назад в базу с помощью менеджера записи соответствующего регистра. Не происходит ли в этот момент запись данных которые я же и заблокировал запросом. Грамотно ли так выполнять чтение и последующую запись данных?<br>Если не удачно сформулировал вопрос приведу краткий пример:<br>Например, вот так читаю данные:<br> Запрос = Новый Запрос();<br> Запрос.Текст = "ВЫБРАТЬ<br>              | РеквизитыБанкаСрезПоследних.Банк,<br>              | РеквизитыБанкаСрезПоследних.БИК,<br>              | РеквизитыБанкаСрезПоследних.Период,<br>              | СправочникБанков.Наименование,<br>              |ИЗ<br>              | РегистрСведений.РеквизитыБанка.СрезПоследних(&Дата, ) КАК РеквизитыБанкаСрезПоследних<br>              | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СправочникБанков КАК СправочникБанков<br>              | ПО РеквизитыБанкаСрезПоследних.Банк = СправочникБанков.Ссылка<br>              |ГДЕ<br>              | СправочникБанков.Наименование = &Наименование"<br>                        | ДЛЯ ИЗМЕНЕНИЯ;<br> Запрос.УстановитьПараметр("Дата", Дата);<br> Запрос.УстановитьПараметр("Наименование", Банк.Наименование);<br> Выборка = Запрос.Выполнить().Выбрать();<br>.....<br>тут далее некая обработка данных<br>.....<br>и потом записываю их:<br> МенеджерЗаписи = РегистрыСведений.РеквизитыБанка.СоздатьМенеджерЗаписи();<br> МенеджерЗаписи.БИК = Выборка2.БИК;<br>        МенеджерЗаписи.Период = Дата; <br> МенеджерЗаписи.Записать();<br><br>Кстати, какой сейчас по умолчанию в платформе используется тип блокировок (пессимистическая или оптимистичная)? В документации есть их описание, но в каких случаях какая применяется что-то не нашел.<br>"

EAX88
читатель
офлайн
Дата регистрации: 23.06.2008
Сообщений: 159
Пост №2
 
18.02.2010 09:07

Не надо путать объектные и транзакционные блокировки, пессимистическая и оптимистичная блокировки относятся к объектным и используются обе 1С. А то что вы имеете ввиду это транзакционные блокировки которые бывают автоматическими и управляемыми, по умолчанию автоматические. Подробнее о блокировках можно почитать в книге "1С предприятие от 8.0 к 8.1"

newbie2010
читатель
офлайн
Дата регистрации: 17.11.2009
Сообщений: 15
Пост №3
 
19.02.2010 09:27

Прочел главу про блокировки. В первом приближении разобрался. Несколько вопросов на понимание, если позволите:<br><br>Верно понимать, что объектная пессимистическая блокировка (сопоставляемая с объектом концигугации, в данном примере с документом) в данном случае срабатывает при инициации формы документа. При создании объекта формы блокировка устанавливается, при закрытии - снимается. При этом само изменение данных возможно (поэтому в самом модуле формы в хэндлерах событий без ошибок данные читаются и записываются). Исключение возникает только при попытке установки блокировки на эти же данные другим или этим же объектом (т.е. если бы вызвал бы метод установки блокировки в явном виде Заблокировать() возник бы эксцепшн). При этом если бы я скажем из какой-либо другой формы конфигурации попытался бы прочитать данные без установки блокировки в последующем если считанные данные были изменены возникло бы исключение, т.к. сработала бы оптимистическая блокировка (проверка версий данных). Верно?<br><br>Транзакционная блокировка в автоматическом режиме устанавливается при начале обновления данных и снимается после завершения последней манипуляции с заблокированными данными. Т.е. При открытии скажем той же формы она не устанавливается, а вот при сохранении изменений она устанавливается на период записи данных и снимается после завершения записи. Верно?<br><br>И еще, для чего служит параметр "ДЛЯ ИЗМЕНЕНИЯ" в запросе? Вероятно,чтобы установить блокировку на прочитанные данные, но какую? и в какой момент она снимается? Если ставится блокировка на данные в запросе (в примере выше) почему без проблем записываются данные через менеджер записи регистра после выполнения данного запроса?<br><br>Заранее благодарен, что поможете разобраться!

cherserver
читатель
офлайн
Дата регистрации: 06.04.2010
Сообщений: 1
Пост №4
 
06.04.2010 15:31

Конструкция "ДЛЯ ИЗМЕНЕНИЯ" устанавливает исключительную транзакционную блокировку на прочитанные данные.<br>Обработка проведения выполняется в любом случае в ОДНОЙ транзакции, даже если вы ее не вызывали явно.<br>Исключительная блокировка устанавливается на записи в таблице (если есть СУБД, к примеру Microsoft SQL Server, но не PostgreSQL), либо на таблицы в целом (файловый вариант, PostgreSQL). Внутри этой транзакции вы можете читать эти данные, можете писать в эту таблицу. Из другой транзакции данные, на которые распространена конструкция "ДЛЯ ИЗМЕНЕНИЯ" не могут быть ни прочитаны, ни записаны. То есть запись менеджером производится в любом случае в той же транзакции, в которой вы читаете эти данные, поэтому и писать, и читать можете. Транзакционные блокировки не работают для, к примеру, отчетов, которые по умолчанию читают данные в режиме "грязного чтения".<br>Вообще, конструкция "ДЛЯ ИЗМЕНЕНИЯ" служит для того, чтобы избежать дедлоков при так называемом повышении уровня блокировок.

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

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация