Имя: Пароль:
1C
1С v8
Установить текущую строку
0 Amfiaray
 
24.02.15
11:35
Добрый день!
Есть документ с табличной частью, при определенных условиях необходимо чтобы активной была только последняя строка вне зависимости от того на какую строку встанет пользователь. никак не могу программно указать активную строку, помогите плиз! Чуть не забыл, это на управляемых формах.
1 D_E_S_131
 
24.02.15
11:39
ОФФ:
Очень задача напоминает ситуацию с выборами в нашей стране. :)
2 zak555
 
24.02.15
11:40
Расширение таблицы формы для динамического списка.ВосстанавливатьТекущуюСтроку (Form table extension for dynamic list.RestoreCurrentRow)
Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
ВосстанавливатьТекущуюСтроку (RestoreCurrentRow)
Использование:

Чтение и запись.
Описание:

Признак необходимости сохранения и восстановления текущей позиции в списке при следующем открытии формы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
3 Amfiaray
 
24.02.15
11:49
(2) мне не надо при следующем открытии, мне надо чтобы все строки в таб части кроме последней были недоступны пользователю
4 mikecool
 
24.02.15
11:50
(3) перед началом редактирования проверяй - если текущая не последняя, то в отказ
5 Бубка Гоп
 
24.02.15
11:51
(0) Сообщить("Нажми на последнюю строчку, а то покусаю!");
6 D_E_S_131
 
24.02.15
11:53
(3) Не проще ли тогда запретить пользователю вообще "ходить по строкам"?
7 Рэйв
 
24.02.15
11:57
ПередНачаломРедактирования проверяй индекс тек строки и если не новая строка и инрдекс не равен  количество строк-1 то Отказ=Истина;
8 Amfiaray
 
24.02.15
11:57
(4) не пойдет, там есть команда завязанная на текущую строку, поэтому надо чтобы текущая была всегда последняя.
И запретить нельзя, последнюю строку они должны редактировать, а вот остальные нет
9 Amfiaray
 
24.02.15
11:58
(7) При редактировании с команд на форме документа, в процедуру ПередНачаломРедактирования не заходит
10 D_E_S_131
 
24.02.15
11:59
Может вообще редактировать не таблицу?
11 Бубка Гоп
 
24.02.15
12:01
хм, а если такой некрасивый метод: в обработчике ожидания проверять, текущаятрока = последняя, если нет, то устанавливать ее.
12 Amfiaray
 
24.02.15
12:01
А что на УФ нельзя просто установить фокус на определенной строку таб части?
13 Бубка Гоп
 
24.02.15
12:02
(12) тут фишка в другом, что пользователю помешает перейти на другие строки?
14 Amfiaray
 
24.02.15
12:02
(11) Как утсановить текущую строку? Если это возможно то можно просто в процедуре ПриАктивизацииСтроки устанавливать последнюю строку активной и всё
15 Amfiaray
 
24.02.15
12:03
(13) Вот я и хочу в ПриАктивизацииСтроки устанавливать последнюю строку, и в какую бы строку он не перешел, фокус оставался бы всё время на последней
16 D_E_S_131
 
24.02.15
12:05
(14) Эдакая иллюзия выбора? :)
Выведи данные последней строки в другие реквизиты и пусть там редактируют. А программно будешь при изменении этих реквизитов менять значение в последней строке.
17 Amfiaray
 
24.02.15
12:08
(16) В документе и без того реквизитов огромное количество, если ещё вывести и реквизиты из таб части, то пользователи вообще запутаются
18 D_E_S_131
 
24.02.15
12:10
(17) Новый закладки, не?
19 Amfiaray
 
24.02.15
12:11
(18) Это крайний случай, может всё таки возможно программно устанавливать текущую строку таб части?
20 kosts
 
24.02.15
12:14
(19) Никто не запрещает устанавливать текущую строку. Для верности можно заблокировать другие строки, что бы пользователи не пытались там что-то поменять.
21 Amfiaray
 
24.02.15
12:19
(20)Как установить?
Пробовал так:
Элементы.ТабЧасть.ТекущаяСтрока = Объект.ТабЧасть[Объект.ТабЧасть.Количество()-1];
не устанавливается, всё равно переходит на другие строки
22 Бубка Гоп
 
24.02.15
12:21
(21) не устанавливается, или не видно что устанавливается?
23 Amfiaray
 
24.02.15
12:24
(22) Не видно что устанавливается, активной становится другая строка
24 Бубка Гоп
 
24.02.15
12:26
[code]
Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
    Элементы.Товары.ТекущийЭлемент = Элементы.ТоварыКоличество;
    Элементы.Товары.ИзменитьСтроку();
[/code]
25 Бубка Гоп
 
24.02.15
12:28
(24) Там новаяСтрока - Это добавленная, то есть позиционирование идет на добавленную строку. в тваем случае, там должен быть идентификатор последней строки
26 Amfiaray
 
24.02.15
12:30
в (21) тоже самое только с позиционированием на нужную строку, без выбора ячейки
27 kosts
 
24.02.15
12:31
В (21) Для УФ не правильно. Надо юзать идентификатор.
28 Бубка Гоп
 
24.02.15
12:37
(26) Индекс != Идентификатор.
вот почитай это
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=592073
29 Amfiaray
 
24.02.15
12:38
Текущая строка меняется, но на фокус всё равно встает на другую строку )
30 Бубка Гоп
 
24.02.15
12:40
(29) на какую другую? не совсем понял
31 Amfiaray
 
24.02.15
12:44
в таб части 2 строки, активной должна быть всегда последняя
Процедура ТабЧастьПриАктивизацииСтроки(Элемент)
    Если Элемент.ТекущаяСтрока<Объект.ТабЧасть.Количество()-1 Тогда
        Элементы.ТабЧасть.ТекущаяСтрока = Объект.ТабЧасть[Объект.ТабЧасть.Количество()-1].ПолучитьИдентификатор();
    КонецЕсли;    
КонецПроцедуры

Когда на форме путаюсь мышкой тыкнуть в первую строку то код выполняется и Элементы.ТабЧасть.ТекущаяСтрока с 0 меняется на 1. Но на форме всё равно активируется первая строка
32 Amfiaray
 
24.02.15
12:44
путаюсь->пытаюсь
33 Бубка Гоп
 
24.02.15
12:53
добавь в конце ИзменитьСтроку() и посмотри какая строка туда попадет
34 Amfiaray
 
24.02.15
13:03
Добавил всё равно.
Элементы.ТабЧасть.ТекущаяСтрока = 1 это правильно, но
Элементы.ТабЧасть.ТекущиеДанные это данные из 0-й строки, и встает всё равно на 0 строку
35 kosts
 
24.02.15
13:03
Вот это не надо.
Если Элемент.ТекущаяСтрока<Объект.ТабЧасть.Количество()-1 Тогда

Возможно система не позволит изменить текущую строку в событии при активизации. Можно попробовать повесить на форму вызов обработчика через 0.1 секунду.
36 kosts
 
24.02.15
13:14
Только надо заблокировать все строки кроме последней, что бы даже супермен не успел ничего изменить в промежуток 0.1 секунду... Это можно сделать в условном оформлении или в событии ПереводыПередНачаломИзменения().


&НаКлиенте
Процедура ПереводыПриАктивизацииСтроки(Элемент)
    
    ЭтаФорма.ПодключитьОбработчикОжидания("АктивизироватьПоследнююСтроку", 0.1, Истина);
    
КонецПроцедуры

&НаКлиенте
Процедура АктивизироватьПоследнююСтроку()
    
    Если Объект.Переводы.Количество() > 0 Тогда
        Элементы.Переводы.ТекущаяСтрока = Объект.Переводы[Объект.Переводы.Количество()-1].ПолучитьИдентификатор();
    КонецЕсли;
    
КонецПроцедуры
37 666 Devil
 
24.02.15
13:15
а если в доке 100 строк и пользователю захочется посмотреть на первую строку?
38 Бубка Гоп
 
24.02.15
13:21
(37) пускай выводит список и хоть заглядится, до дыр может его разглядывать
39 Amfiaray
 
24.02.15
13:37
Спасибо, сделал через обработчик ожиданий.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс