Имя: Пароль:
1C
1С v8
Метод ЗАГРУЗИТЬ() табличной части
,
0 only82
 
27.08.11
20:15
Результат запроса (1257 строк) выгружаю в табличну часть обработки:
Объект.Участки.Загрузить(Результат.Выгрузить());

Далее обращаюсь к строке:
&НаКлиенте
Процедура УчасткиПриИзменении(Элемент)
   Строка = Объект.Участки[Элемент.ТекущаяСтрока];
   ПроцедурыУправленияПерсоналом.ЗаписатьУчасток(Строка.НаселенныйПункт,Строка.Улица,Строка.НомерДома,Строка.Участок);
КонецПроцедуры

Все работает отлично, но если повторно использую метод Загрузить(), то свойство ТекущаяСтрока находится за пределами массива. Напр: после первого использования ТекущаяСтрока = 1, после второго эта же строка = 1258, после третьего = 2515, и т. д. Это баг версии, или так и должно быть? Версия 8.2.14.519
1 Лефмихалыч
 
27.08.11
20:58
(0) включи голову в розетку. Элемент.ТекущаяСтркоа после вызова Загрузить() содержит ссылку на строку коллекции, которой уже не существует
2 only82
 
27.08.11
23:18
(1) Это почему? Я обращаюсь к свойству "ТекущаяСтрока" в обработчике события "ПриИзменении", получаю новый объект "Элемент", и свойства у него тоже новые.
3 Amiralnar
 
28.08.11
06:39
1. Если Элемент.ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли;

2. Объект.Участки.Очистить(); Объект.Участки.Загрузить(Результат.Выгрузить());

Дальше зависит от того, чем занимается (0).
4 only82
 
28.08.11
13:05
(3) Метод Загрузить() и делает предварительную очистку а потом загрузку. Очистить() абсолютно ничего не меняет. И Элемент.ТекущаяСтрока = Неопределено будет только в том случае если табличная часть не имеет строк, а в моем случае Элемент.ТекущаяСтрока = 1258.
Неужели никто не делал ничего подобного?
5 ДенисЧ
 
28.08.11
13:07
вотжеблеатЪ.

Сохраняем текущую строку, потом полностью переписаваем содержимое ТЧ и хотим, чтобы в строке осталось что-то вменяемое...
6 only82
 
28.08.11
13:09
Блин, вы можете написать как правильно? То что это не работает я и сам прекрасно понимаю
7 ДенисЧ
 
28.08.11
13:11
(6) смотря что ты хочешь сделть....
8 only82
 
28.08.11
13:17
(7) Неужели не ясно? Я хоче чтобы после второго вызова Загрузить() ТекущаяСтрока не менялась. Надо внимательно читать (0)!
9 ДенисЧ
 
28.08.11
13:19
(8) не взлетит.
10 EvgeniuXP
 
28.08.11
15:22
(8) она слетит.
11 Лефмихалыч
 
28.08.11
15:24
(8) этого ты не получишь
12 Лефмихалыч
 
28.08.11
15:24
+(11) живи с этим
13 Лефмихалыч
 
28.08.11
15:25
или надо не загружать ни чего, или после загрузки ищи нужную строку заново
14 EvgeniuXP
 
28.08.11
15:26
сняли розовые очки...
15 only82
 
28.08.11
19:14
Если не знаете как сделать правильно - не пишите.
16 Лефмихалыч
 
28.08.11
19:27
(15) всё уже сказано, если ты не в силах понять, что тебе говорят, наверное дело в тебе, а не в нас
17 only82
 
28.08.11
20:06
(16) Я же нормально попросил не писать всякую чушь. Лефмихалыч, не пиши здесь ничего больше.
18 only82
 
28.08.11
20:35
Все, разобрался сам.
Если кому интересно: Мне в данном случае нужно было использовать Элемент.ТекущиеДанные.НомерСтроки. Но нумерация тут начинается не с 0, а с 1, поэтому правильно будет Элемент.ТекущиеДанные.НомерСтроки-1.

&НаКлиенте
Процедура УчасткиПриИзменении(Элемент)
   Строка = Объект.Участки[Элемент.ТекущиеДанные.НомерСтроки-1];
   ПроцедурыУправленияПерсоналом.ЗаписатьУчасток(Строка.НаселенныйПункт,Строка.Улица,Строка.НомерДома,Строка.Участок);
КонецПроцедуры