Имя: Пароль:
1C
1C 7.7
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) Ну так обработка блокировку-то пытается установить? Во-от. А другой пользователь эту таблицу в этот момент уже заблокировал. И снять ее программно не получится, т.к. блокировка эта устанавливается на уровне платформы.
Ошибка? Это не ошибка, это системная функция.