Имя: Пароль:
1C
1С v8
ТекущаяСтрока в табличной части
,
0 an_str
 
28.05.13
09:04
Здравствуйте!!! подскажите, пожалуйста, что не так. Не могу позиционировать курсор на нужной строке, перескакивает на первую после удаления строки в табл части. Следующий код:

&НаКлиенте
Процедура ТаблицаПередУдалением(Элемент, Отказ)
   Отказ = Истина;
   
   ТекущиеДанные = Элемент.ТекущиеДанные;                    
   
   ТаблицаФормы = ЭтаФорма[Элемент.Имя];
   
   ТекущаяСтрока = Элемент.ТекущаяСтрока;
           
   ТаблицаФормы.Удалить(ТекущиеДанные);
   
   РасчитатьИтогиПоТаблице(Элемент.Имя);
   
   Модифицированность = Истина;
   
   Элемент.ТекущаяСтрока = 15; // Вот так позиционирует!!!!!
       Элемент.ТекущаяСтрока = ТекущаяСтрока ; // А вот так нет!!!!! хотя значение в переменной есть и оно типа строка!!!

   КонецПроцедуры

не могу понять что не так((( уже и разные переменные вводила, и переприсваивала....
1 lEvGl
 
гуру
28.05.13
09:07
наверно надо ПослеУдаления "позиционировать"
2 kosts
 
28.05.13
09:07
(0) Ты же вроде как удалил строку, а потом хочешь на удаленной спозиционироваться...
3 1Снег
 
28.05.13
09:07
(0) попробуйте
Элемент.ТекущаяСтрока = Строка(ТекущаяСтрока);
или
Элемент.ТекущаяСтрока = Число(ТекущаяСтрока);

потому что Элемент все таки ссылка, которую Вы удаляете
4 Cube
 
28.05.13
09:08
(0) Рубить сук, на котором сидишь, это опять модно? :)
5 lEvGl
 
гуру
28.05.13
09:08
(2) фотко есть )
6 an_str
 
28.05.13
09:11
(1) в послеУдаления не заходит, т.к. стоит в ПередУдалением Отказ = Истина !!! код уже переписывать не хочется из-за этого дурацкого позиционирования

(2) я строку-то удалила и хочу на предыдущей спозиционироваться

(3) не помогает, пробовала((((
7 vicof
 
28.05.13
09:12
(0) Боюсь спросить, зачем вообще этот код написан?
8 vicof
 
28.05.13
09:12
(4) правильней "Рубить сук, на которых лежишь"
9 kosts
 
28.05.13
09:13
(7) Думается, что бы итоги рассчитать
10 vicof
 
28.05.13
09:15
(9) Хочется узнать мнение автора :)
11 Cube
 
28.05.13
09:15
(6) "я строку-то удалила и хочу на предыдущей спозиционироваться"

Боюсь показаться не оригинальным, но это стандартное поведение платформы. Так что можешь смело удалить весь код из (0) и получишь то, что хочешь...
12 an_str
 
28.05.13
09:17
(11) это ТаблицаЗначений...может поэтому платформа позиционирует на 1 строке после удаления, хоть с этим кодом,хоть без него...
13 vicof
 
28.05.13
09:19
(12) ты уверена? :))
14 an_str
 
28.05.13
09:19
(10) Черт знает кто этот код писал, мне сказано ничего не менять, а просто сделать, чтобы не перескакивало на 1 строку, а то каждый раз прокручивать список не есть гуд, особенно когда он огромный....Я думала обойтись малой кровью, по ходу и правда придется разбираться и переписывать..
15 Rounder
 
28.05.13
09:19
(12) Здесь скорее всего не важна суть объекта - важна суть элемента - т.е. важно то, что это ТаблицаФормы или ДинамическийСписок.
16 lEvGl
 
гуру
28.05.13
09:21
(11) как раз оригинальность
ептить, узнай номер текущей строки перед удалением и после того как удалила поставь курсор в номерстрокиперед - 1; с проверками конечно, вдруг строк не останется или еще чего
17 Cube
 
28.05.13
09:22
(12) Наглая ложь и клевета.
(14) Скорее всего у тебя происходит обновление таблицы на форме.
18 Rounder
 
28.05.13
09:23
(12) Для начала нужно сделать как кто-то в теме уже советовал - закомментировать код, который отвечает за позиционирование и посмотреть на стандартное поведение системы. Если не устроит, то тогда пробовать через Идентификатор (во всяком случае у меня по иному не получилось).
Вот кусок кода - была задача позиционироваться на любой строке с нужной номенклатурой:

Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ВыбранноеЗначение);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 Тогда
   Элементы.Товары.ТекущаяСтрока = МассивСтрок[0].ПолучитьИдентификатор();
КонецЕсли;
19 Cube
 
28.05.13
09:25
+(18) Вместо

Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ВыбранноеЗначение);
МассивСтрок = Объект.Товары.НайтиСтроки(Отбор);

Можно

МассивСтрок = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", ВыбранноеЗначение));
20 Rounder
 
28.05.13
09:27
(19) Ну мы же не причесывание кода обсуждаем :) И тот и тот вариант имеет право на жизнь и корректен.

Сам принцип позиционирования у меня работает только при использовании Идентификатора.
21 an_str
 
28.05.13
09:28
(18), (19) СПАСИБО огромное!! так работает!!!!!фуф...) спасибо еще раз)
22 Rounder
 
28.05.13
09:28
(19) + к (20) Этот же отбор вполне себе используется дальше в коде (либо может использоваться). В таком варианте мой код предпочтительней :)
23 Rounder
 
28.05.13
09:28
(21) Пжл.
24 Cube
 
28.05.13
09:29
(20) Люблю компактность :)

А про позиционирование - у тебя так работает из-за того, что получить номер строки в УФ очень сложно, если данные на нем постоянно обновляются. Смысл в том, что если в пустую таблицу добавить строку, то у неё будет номер 1. Удаляем строку и добавляем новую. В итоге у нас в таблице 1 строка и идентификатор у нее 2...
25 an_str
 
28.05.13
09:30
(24) спасибо за пояснение