|
v7: 1SBLOB ошибка транзакции |
☑ |
0
trinity3187
31.08.15
✎
07:43
|
Всем привет. 1с 7.7 27, ТиС 9.2
Возникает ошибка транзакции:
АдресВыгрузки = СокрЛП(Константа.csАдресДляВыгрузкиФайловОбмена8.АдреснаяСтрока); : {Глобальный модуль(20232)}: Таблица: 1SBLOB Ошибка обращения к данным при транзакции, выполняемой другим пользователем.
Вопрос: не понимаю, как вообще могла возникнуть эта ошибка? В данной строке кода ничего не сохраняется.
Попытался вручную вызвать такую ошибку, написал в тестовой базе:
спр = СоздатьОбъект("Справочник.csАдресДляВыгрузкиФайловДляОбменаСБазой8");
спр.НайтиЭлемент(Справочник);
СчетчикЦикла = 0;
НачатьТранзакцию();
Для СчетчикЦикла = 1 По 10000 Цикл
спр.АдреснаяСтрока = СчетчикЦикла;
спр.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
При выполнении этого кода транзакции нет.
|
|
1
DCKiller
31.08.15
✎
07:49
|
Скорей всего, кто-то уже на момент твоего обращения к этой константе заблокировал либо ее саму, либо, скорее всего, какой-то реквизит типа "строка неограниченной длины" в справочнике или документе.
|
|
2
trinity3187
31.08.15
✎
07:54
|
(1) в этом и вопрос, как можно заблокировать?
Например если начать изменять константу в этот момент её можно прочитать
|
|
3
Смотрящий
31.08.15
✎
07:56
|
(0) В клюшках, константы и периодические значения реквизитов хранятся в одной физической таблице. При чтении либо того либо другого система накладывает на таблицу целиком исключительную блокировку.
У тебя кто то читает периодику, а падает твой код.
|
|
4
trinity3187
31.08.15
✎
08:13
|
(3) как я понимаю вы имеете ввиду таблицу 1SCONST. У меня проблема с 1SBLOB (хранятся реквизиты неограниченной длины), "АдреснаяСтрока" как раз такой реквизит. Я пытаюсь понять как блокируется эта таблица, но "вручную" заблокировать никак не получается, в первом сообщении я привел пример кода.
|
|
5
DCKiller
31.08.15
✎
08:17
|
(2) Никак. Единственный способ - меняй тип константы, устанавливай ей фиксированную длину строки, тогда то, что там другие юзеры делают с блобом, до тебя не будет касаться.
|
|
6
trinity3187
31.08.15
✎
08:21
|
(5) ну если юзеры смогли заблокировать, то и я должен смочь) Спасибо за ответы, поменяю тип реквизита
|
|
7
DCKiller
31.08.15
✎
08:41
|
(6) Юзеры были первыми :) в этом-то и вся фишка.
|
|
8
trinity3187
31.08.15
✎
08:44
|
(7) эээ, может быть Вы меня неправильно поняли. Я запускаю обработку под одним пользователем. А смотрю заблокированность под другим.
|
|
9
DCKiller
31.08.15
✎
09:02
|
(8) Ну так обработка блокировку-то пытается установить? Во-от. А другой пользователь эту таблицу в этот момент уже заблокировал. И снять ее программно не получится, т.к. блокировка эта устанавливается на уровне платформы.
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой