Имя: Пароль:
1C
1С v8
Фича с транзакцией и строкой табличной части.
0 ptiz
 
04.09.12
13:15
Вот простейший код:

   СтрокаТЧ = ДокСсылка.Товары[0];
   Сообщить("индекс строки Ссылки до транзакции = " + ДокСсылка.Товары.Индекс(СтрокаТЧ));
   НачатьТранзакцию();
   Сообщить("индекс строки Ссылки в транзакции = " + ДокСсылка.Товары.Индекс(СтрокаТЧ));

Результат:
индекс строки Ссылки до транзакции = 0
индекс строки Ссылки в транзакции = -1

А если использовать ДокументОбъект, то результат одинаков.

Что за фича?
1 Reset
 
04.09.12
13:18
СтрокаТЧ = ДокСсылка.Товары[0];
   Сообщить("индекс строки Ссылки до транзакции = " + ДокСсылка.Товары.Индекс(СтрокаТЧ));

Так делать, вообще говоря, некорректно.
В первой и второй строке - объекты разные
2 ptiz
 
04.09.12
13:21
(1) Чем ДокСсылка отличается от ДокСсылка?
3 Reset
 
04.09.12
13:22
(2) Ты начни с того, чем объек отличается от ссылки и что делает происходит при обращении через точку
4 Reset
 
04.09.12
13:24
Можно предположить, что в первом случае изза кеширования объекта строка нашлась, а во втором случае начало транзакции форсировало повтороное чтение объекта. Но не понимаю, зачем задаваться поведением системы на заведомо некорректных примерах?
5 ptiz
 
04.09.12
13:26
(3) Где ты видешь ОБЪЕКТ?
6 Reset
 
04.09.12
13:29
(5) Твой уровень мне понятен. Я оставлю объяснение основ моем более терпеливым коллегам.
7 ptiz
 
04.09.12
13:42
Понял наводку.
Если ДокСсылка.Товары запихнуть в переменную, то транзакция не влияет.

"Начало транзакции форсировало повтороное чтение объекта" - похоже.
Получается, он все кэшированные данные сбрасывает? Надо проверить.
8 Reset
 
04.09.12
13:51
(7) Я вообще не люблю что-либо через точку от ссылки читать, на самом деле. Предпочитаю явно ПолучитьОбъект() в переменную и ее использовать, либо запросом.
Извини за резкость :\
День тяжелый
9 ptiz
 
04.09.12
13:56
Проверил.
При появлении новой транзакции идет повторное обращение к базе при чтении реквизитов ссылок.
Где-нибудь можно использовать.
Но т.к. не встречал этого в документации, не факт, что такое поведение будет всегда.
10 ssh2006
 
04.09.12
14:02
Вообще это логично, накладывается блокировка