Сам регистр ОстаткиМатериалов имеет измерения Номенклатура, ОтвественныйСотрудник и ресурсы Количество, Сумма.
Когда я одновременно провожу 2 документа (имитируя задержку в одном сеансе), то второй документ вылетает, сообщая мне, что не может заблокировать таблицу. Причем в этих документах номенклатура разная. Для чистоты эксперимента даже ответственные сотрудники в документах разные.
Кто-то может в курсе почему один документ блокирует второй?
Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0
Ну так Вы ж блокируете "РегистрНакопления.ОстаткиМатериалов", а ругается на таблицу документов. Попробуйте в момент блокировки провести другой документ, который двигает по этому регистру, подозреваю что проблем не будет.
Сообщение отредактировал Batchir - 27.04.12, 15:11
Живет на форуме
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0
Цитата(Batchir @ 27.04.12, 16:09)
Ну так Вы ж блокируете
Ну так всё остальное что нужно тоже блокируется. Только в автоматическом режиме. И таблицы целиком. И в момент постановки на паузу таблица документов уже почему-то перешла в режим блокировки. ИМХО.
Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0
Ну пауза я так понимаю это остановка в отладчике в момент когда идет блокировка регистра или команда предупреждения.
ИМХО скорее всего идет следующая последовательность 1. Начало общей транзакции перед записью и проведением документа. 2. Запись документа. В этот момент таблица блокируется, т.к. именно в момент записи появляется инфо о том что изменились данные. 3. Проведение документа. В этот момент таблица документов блокирована, разблокируется после завершения/отмены транзакции. 4. Окончание общей транзакции после записи и проведения документа. Таблица документов разблокирована.
если на этапе после 2 и перед 4 поставить паузу, то в этот период таблица документа заблокирована, т.к. были её изменения в транзакции и любая попытка изменить в ней данные приведет к сообщению о блокировке.
Сообщение отредактировал Batchir - 27.04.12, 16:07
А нажать кнопку нового документа "ОК" (запись с проведением) документ запишется если есть ошибки при проведении? Нет. А событие ПриЗаписи вызывается и в этот момент идет запись документа в таблицу и таблица блокируется, но в событии ОбработкаПроведения идет откат. Как оказывается не записанным документ если запись и проведение не выполняются в единой транзакции? ХЗ, может я чего то не так говорю.
Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0
Я смотрю на ситуацию простым взглядом. Если нажать на ОК (запись с проведением), то вызываются последовательно события ПередЗаписью() ПриЗаписи() ОбработкаПроведения() Если на любом из этапов дать Отказ, то мы получим откат до исходного состояния. Если это происходит не в единой транзакции, то как?
Последовательность действий, приводящая к взаимной блокировке:
Транзакция Т1 записывает документ в таблицу документов, устанавливая эксклюзивную блокировку. Транзакция Т2 пытается записать документ и обновить записи в таблице. При этом она пытается установить эксклюзивную блокировку, но ей это не удается, т.к. на таблицу уже установлена эксклюзивная блокировка транзакцией Т1. Транзакция Т2 ожидает, когда транзакция Т1 закончится и снимет установленную блокировку. Только после этого она может быть выполнена.
Транзакция Т1 записывает документ в таблицу документов, устанавливая эксклюзивную блокировку. Транзакция Т2 пытается записать документ и обновить записи в таблице. При этом она пытается установить эксклюзивную блокировку, но ей это не удается, т.к. на таблицу уже установлена эксклюзивная блокировка транзакцией Т1. Транзакция Т2 ожидает, когда транзакция Т1 закончится и снимет установленную блокировку. Только после этого она может быть выполнена.
Все это логично, НО 1с зачем-то сделали управляемые блокировки и управлять блокировками таблиц документов НЕЛЬЗЯ! Да и блокироваться таблица документов должна вся только при добавлении НОВОГО документа, при изменении документа должна блокироваться только соответствующая запись. (во всяком случае так было еще в КДИППЕРЕ).
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0
Выдержка с ИТС:
Цитата
... При разработке (или доработке) системы следует всегда использовать сформулированное выше правило: блокировка в транзакции должна изначально осуществляться с максимально необходимым уровнем изоляции. Это позволит полностью исключить возникновение таких взаимоблокировок в системе.
Типичной ошибкой в коде конфигурации, которая может приводить к возникновению взаимоблокировок данного вида, является неблокирующее чтение и последующая запись в рамках одной транзакции: 1. Автоматический режим: а. Чтение без опции "ДЛЯ ИЗМЕНЕНИЯ" и последующая запись. б. Чтение в объектной технике и последующая запись. 2. Управляемый режим: Чтение без установки блокировки (либо с установкой разделяемой блокировки) и последующая запись.
Для возникновения взаимоблокировки данного вида необходимо одновременное выполнение следующих условий: Операции чтения и записи происходят в рамках одной транзакции. Если чтение и запись происходят в разных транзакциях, то это не может быть причиной возникновения взаимоблокировок. Следует учитывать, что транзакция может быть неявной, то есть автоматически создаваться "1С:Предприятием" (например, при проведении документа). Записывается тот же самый ресурс, который перед этим был прочитан. Если читается один ресурс, а записывается другой, то это не может быть причиной возникновения взаимоблокировки. ...
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 13962
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7
alex040269, решения пока нету.
Но я забыл про один очень важный момент: я провожу эксперименты на файловой базе. Почему-то думаю, что на SQL оно себя будет вести по другому. О результатах отпишу (скорей всего после праздников).
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!