![]() |
![]() |
![]() |
|
Ошибка блокировки объекта. Объект уже заблокирован... | ☑ | ||
---|---|---|---|---|
0
Crongwild
20.09.11
✎
11:45
|
Есть в компании своя база на основе типовой ЗУП 2.5. В ней разработаны несколько документов, использующих механизм хранения файлов.
Механизм хранения файлов реализован следующим образом: есть регистр сведений "Депозитарий", имеющий ссылку на документ, к которому относится файл, ну и информацию по файлу. Чтобы во всех документах было проще поддерживать данный механизм, добавлена обработка "Управление файлами". На форме документа есть реквизит с объектом данной обработки, на отдельной закладке выводится табличное поле с табличной частью данной обработки, при открытии формы документа производится считывание записей из регистра "Депозитарий". Ну и еще обработчики событий "ПриВыводеСтроки" и "ПриАктивизацииСтроки" для этого табличного поля, где просто идет работа с оформлением строки и т.д. Если в двух сеансах открыть один документ, то все нормально, на чтение все работает. Но если переключиться в обоих сеансах на закладку с таблицей файлов, то первый переключившийся нормально все увидит, а у второго будет ошибка "Ошибка блокировки объекта. Объект уже заблокирован...". Непонятно, что платформа хочет заблокировать, если просто производим чтение с регистра. Платформа 8.2.13.219, клиент-серверная работа, толстый клиент (обычное приложение), форма обычная. |
|||
1
skunk
20.09.11
✎
11:50
|
блокирует регистр "Депозитарий"
|
|||
2
Crongwild
20.09.11
✎
11:55
|
Забыл уточнить, кстати. Регистр сведений независимый. При открытии формы запросом с него получаются данные, при записи документа данные записываются в регистр.
Почему чтение блокирует записи регистра? |
|||
3
Crongwild
20.09.11
✎
12:03
|
Как избавиться от этого, нет ни у кого мыслей?
|
|||
4
Crongwild
20.09.11
✎
12:13
|
ау...
|
|||
5
ptiz
20.09.11
✎
12:16
|
Нужен код - что проиходит при " если переключиться в обоих сеансах на закладку с таблицей файлов"
|
|||
6
Crongwild
20.09.11
✎
12:23
|
Код примерно такой...
На форме: Процедура ФайлыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) ОбработкаОбъектУправлениеФайлами.ПриВыводеСтрокиФайлы(Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ФайлыПриАктивизацииСтроки(Элемент) ОбработкаОбъектУправлениеФайлами.ОбновитьКартинку(ЭлементыФормы.ТекущаяКартинка, ЭлементыФормы.Файлы.ТекущиеДанные); КонецПроцедуры В обработке: Функция ПолучитьФайлИзВременнойТаблицы(ИмяФайла) СтрокаФайла = ТаблицаФайлов.Найти(ИмяФайла, "ИмяФайла"); Если СтрокаФайла = Неопределено Тогда СтрокаФайла = ТаблицаФайлов.Добавить(); СтрокаФайла.ИмяФайла = ИмяФайла; КонецЕсли; Возврат СтрокаФайла.Значение; КонецФункции Процедура ПриВыводеСтрокиФайлы(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт ОформлениеСтроки.Ячейки.Статус.ОтображатьТекст = Истина; Если Не ПолучитьФайлИзВременнойТаблицы(ДанныеСтроки.ИмяФайла) = Неопределено Тогда ОформлениеСтроки.Ячейки.Статус.Текст = "текст 1"; Иначе ОформлениеСтроки.Ячейки.Статус.Текст = "текст 2"; КонецЕсли; КонецПроцедуры Процедура ОбновитьКартинку(ЭлементКартинки, ДанныеСтроки) Экспорт ТекущаяКартинка = ПолучитьФайлИзВременнойТаблицы(ДанныеСтроки.ИмяФайла); Если ТекущаяКартинка = Неопределено Тогда ТекущаяКартинка = Новый Картинка(); КонецЕсли; ЭлементКартинки.Картинка = ТекущаяКартинка; КонецПроцедуры ТаблицаФайлов - переменная обработки, заполняется в процедуре, вызываемой при открытии формы: Процедура ПрочитатьЗаполнитьФайлы() Экспорт Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | РегистрСведений.ЗБ_Депозитарий КАК ЗБ_Депозитарий |ГДЕ | ЗБ_Депозитарий.Документ = &Документ | И ЗБ_Депозитарий.ТЧ = &ТЧ"; Запрос.УстановитьПараметр("Документ", Документ); Запрос.УстановитьПараметр("ТЧ", ТЧ); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); Файлы.Загрузить(ТаблицаРезультат); // Заполним таблицу файлов Для Каждого ТекСтрока Из ТаблицаРезультат Цикл НоваяСтрока = ТаблицаФайлов.Добавить(); НоваяСтрока.ИмяФайла = ТекСтрока.ИмяФайла; НоваяСтрока.Значение = ТекСтрока.ХранилищеФайла.Получить(); КонецЦикла; КонецПроцедуры |
|||
7
ptiz
20.09.11
✎
12:29
|
А ведь точно. Такая же ситуация при открытии закладки "свойства" одного и того же контрагента разными юзерами в типовых.
|
|||
8
ptiz
20.09.11
✎
12:41
|
Если убрать галку "изменяет данные" с таб.поля, то проблема уйдет.
|
|||
9
Crongwild
20.09.11
✎
13:29
|
(8) Да, работает... Но все же хотелось бы отслеживать изменение данных, а то пользователь укажет файл, нажмет закрыть - и документ спокойно закроется.
Но спасибо за подсказку (7), буду анализировать. |
|||
10
ptiz
20.09.11
✎
15:09
|
(9) Никуда изменения не денутся.
В обработчике "ПриИзменении" (при изменении поля в таб.части) как в типовой: Модифицированность = Истина |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |