|
8.2 Как в таблице установить текущую строку программно. | ☑ | ||
|---|---|---|---|---|
|
0
Mustang
06.05.10
✎
14:47
|
Подскажите как программно установить текущую строку. Я понимаю что нужно юзать "ТекущаяСтрока", но ей присваивается не номер строки, а индекс. Тогда как получить индекс следующей строки.
|
|||
|
1
Topol-M
06.05.10
✎
15:06
|
Стр = Объект.Товары.Добавить();
Элементы.Товары.ТекущаяСтрока = Стр.ПолучитьИдентификатор(); |
|||
|
2
Mustang
06.05.10
✎
15:08
|
Строки уже сформированы (выгружены запросом). Далее нужно по ним перемещять курсор.
|
|||
|
3
Шапокляк
06.05.10
✎
15:09
|
Это как? чтоб курсор шарился по форме самостоятельно?
|
|||
|
4
Mustang
06.05.10
✎
15:11
|
Нет. Есть две кнопки. Предыдущая строка. Следующая строка.
|
|||
|
5
Phace
06.05.10
✎
15:13
|
Механизм удаления текущей строки (под свой случай думаю сам доведешь):
ИдентификаторСтроки = Элементы.Погрузки.ТекущаяСтрока; Если ИдентификаторСтроки <> Неопределено Тогда ЭлементКоллекции = Объект.Погрузки.НайтиПоИдентификатору(ИдентификаторСтроки); ИндексЭлементаКоллекции = Объект.Погрузки.Индекс(ЭлементКоллекции); Объект.Погрузки.Удалить(ИндексЭлементаКоллекции); КонецЕсли; |
|||
|
6
Aprobator
06.05.10
✎
15:17
|
|
|||
|
7
Mustang
06.05.10
✎
15:18
|
Как получить индекс текущей строки я понимаю, а как получить индекс следующей строки (она не активна).
|
|||
|
8
Aprobator
06.05.10
✎
15:18
|
в смысле? 1 не прибавить?
|
|||
|
9
Aprobator
06.05.10
✎
15:20
|
Переход на след. строку:
|
|||
|
10
Aprobator
06.05.10
✎
15:20
|
|
|||
|
11
Mustang
06.05.10
✎
15:26
|
Таак. Чет я совсем похоже заблудился.
"ТЗСвязаннаяСТаблПолем.Индекс(Элементы.Погрузки.ТекущаяСтрока)" В Индекс(...) Нужно передать строку, для того чтоб получить индекс. "Элементы.Погрузки.ТекущаяСтрока" - Содержит идентификатор текущей строки но не строку. Соответственно: "ТЗСвязаннаяСТаблПолем.Индекс(Элементы.Погрузки.ТекущаяСтрока)" = -1 |
|||
|
12
Aprobator
06.05.10
✎
15:28
|
(11) а блин соррь. Я проглядел, что это 8.2 (. Это все по 8.1 было.
|
|||
|
13
Aprobator
06.05.10
✎
15:36
|
+(12) хотя должно работать. Щаз у ся на демке потестю для опыта
|
|||
|
14
Phace
06.05.10
✎
15:49
|
(5) "под свой случай думаю сам доведешь"
Не, вижу не доведешь :) -1 и +1 (с проверкой) сделать не в силах? |
|||
|
15
ll13
06.05.10
✎
15:49
|
Элементы.СписокФайлов.ТекущаяСтрока (число)
Индекс текущей строки, начинается помоему с 0 Соответственно поднять вверх Элементы.СписокФайлов.ТекущаяСтрока=Элементы.СписокФайлов.ТекущаяСтрока - 1; опустить вниз Элементы.СписокФайлов.ТекущаяСтрока=Элементы.СписокФайлов.ТекущаяСтрока + 1; Проверяй на начало и конец |
|||
|
16
shuhard_серый
06.05.10
✎
16:05
|
(15) + 1
для ТЧ &НаКлиенте Процедура НаСтрокуВниз(Команда) Элементы.Товары.ТекущаяСтрока=Элементы.Товары.ТекущиеДанные.НомерСтроки; КонецПроцедуры &НаКлиенте Процедура НаСтрокуВВерх(Команда) Элементы.Товары.ТекущаяСтрока=Элементы.Товары.ТекущиеДанные.НомерСтроки-2; КонецПроцедуры |
|||
|
17
Mustang
06.05.10
✎
16:18
|
Народ. Вы разницу между индексом строки и идентификатором строки различаете?
|
|||
|
18
Mustang
06.05.10
✎
16:19
|
(15) Нет.
|
|||
|
19
Mustang
06.05.10
✎
16:20
|
(15) 1 строка может быть с идентификаторм и 300 и 400.
|
|||
|
20
Phace
06.05.10
✎
16:30
|
"Давайте я попробую объяснить вам на таблицах первого уровня (чтобы не загромождать объяснение), а вы уже сами сделаете то же самое для других таблиц.
Дело в том, что таблица, которая в форме, элемент формы, и таблица, которая в реквизите (ДанныеФормыКоллекция) - это разные таблицы. Это две разные коллекции. Они, конечно, однозначно связаны между собой. То есть зная строку одной таблицы можно получить соответствующую ей строку другой таблицы. Но эта связь не такая, как вы ее себе представляете: ГлавнаяТаблицаЗначений[Элементы.ГлавнаяТаблицаЗначений.ТекущаяСтрока] ТекущаяСтрока у таблицы в форме это не индекс таблицы в реквизите. Эти две таблицы связаны через Идентификатор. У таблицы в форме идентификатор можно получить как раз через текущую строку: Идентификатор = Элементы.ГлавнаяТаблицаЗначений.ТекущаяСтрока; У таблицы в реквизите (ДанныеФормыКоллекция) есть метод НайтиПоИдентификатору(Идентификатор), который вернет вам строку, соответствующую текущей строке в таблице формы. В обратную сторону аналогично. Если вы знаете строку у таблицы в реквизите, вы можете найти (или установить курсор на) строку, соответствующую ей в таблице в форме. У строки таблицы в реквизите (ДанныеФормыЭлементКоллекции) есть метод ПолучитьИдентификатор(): Идентификатор = СтрокаГлавнойТаблицыЗначений.ПолучитьИдентификатор(); А у таблицы в форме - известное уже свойство ТекущаяСтрока: Элементы.ГлавнаяТаблицаЗначений.ТекущаяСтрока = Идетнификатор; Таким образом перед выполнением манипуляций вам нужно узнать, какая строка в таблице реквизита соответствует текущей строке в таблице формы. Каким-то образом запомнить, что это за строка. После выполнения манипуляций в таблице реквизита вам нужно найти эту запомненную строку, получить ее идентификатор и таблице в форме сказать, что ее текущая строка должна быть равна этому идентификатору." (с) Максим Радченко, 1С |
|||
|
21
Mustang
06.05.10
✎
16:33
|
(20) Во правильная статья. А мне все индекс, индекс. +1, -1.
|
|||
|
22
Phace
06.05.10
✎
16:34
|
Я тебе еще в (5) отписывал код с определением текущей строки ТЧ, но ты же не слушаешь.
|
|||
|
23
Mustang
06.05.10
✎
16:36
|
(22) Да как текщую строку определить я знаю. Мне пример тот ничего нового не дал.
Ну определил я текущую строку. Узнал что у нее идентификатор 300, следущая строка идет с идентификатором 512. Мне какой смысл от текущей строки или от идентификаторм 300? |
|||
|
24
Mustang
06.05.10
✎
16:37
|
(22) Мне же нужно узнать что за ткущей строкой идет строка с идентификатором 512.
|
|||
|
25
shuhard_серый
06.05.10
✎
16:40
|
(24) задачку целиком опиши
что за форма, что за таблица, что за данные в ней вопрос актуальный, результат востребованный |
|||
|
26
Phace
06.05.10
✎
16:41
|
(24) Бррр, а вот так в первой строчке кода написать?
ИдентификаторСтроки = Элементы.Погрузки.ТекущаяСтрока -1; |
|||
|
27
Mustang
06.05.10
✎
16:45
|
(26) ОК. Идет заполнение строк таблицы^
Перваоя строка - идентификатор 0 Вторая строка - иднетификатор 1 Третья строка - идентификатор 2 После, удаляем "Вторую строку", при этом идентификаторы не сбиваются. Вот с этим путать не нужно. Получиться: Первоя строка - идентификатор 0 Вторая строка (была Третья строка) - идентификатор 2 По примеру: Текущая трока "Первоя строка" получаю идентификатор 0. Прибавляю 1. Получаю идентификатор 1 (уже не существующей строки). В результате Error. |
|||
|
28
Phace
06.05.10
✎
16:48
|
(27) "По примеру: Текущая трока "Первоя строка" получаю идентификатор 0. Прибавляю 1. Получаю идентификатор 1 (уже не существующей строки). В результате Error."
Да ты почитай внимательно, ты получаешь сначала следующую строку от текущей, а затем только определяешь ее идентификатор, а не наоборот. |
|||
|
29
Phace
06.05.10
✎
17:43
|
Все оказалось проще. Это для следующей строки:
&НаКлиенте Процедура Пред(Команда) Если Элементы.Погрузки.ТекущиеДанные.НомерСтроки < Объект.Погрузки.Количество() Тогда ИндексЭлементаКоллекции = Объект.Погрузки.Получить(Элементы.Погрузки.ТекущиеДанные.НомерСтроки); Элементы.Погрузки.ТекущаяСтрока = ИндексЭлементаКоллекции.ИсходныйНомерСтроки-1; КонецЕсли; КонецПроцедуры |
|||
|
30
ll13
07.05.10
✎
18:08
|
(29) Реквизита "НомерСтроки" может и не быть ...
Я вроде бы разобрался с тонкостями работы с ТЗ на форме, делаю так: &НаКлиенте Процедура КурсорВниз(Команда) ИндексТекущегоЭлементаКоллекции = ТЗОбъект.Индекс(Элементы.ТЗОбъект.ТекущиеДанные); КоличествоЭлементовКоллекции = ТЗОбъект.Количество(); Если ИндексТекущегоЭлементаКоллекции < КоличествоЭлементовКоллекции - 1 Тогда Элементы.ТЗОбъект.ТекущаяСтрока = ТЗОбъект[ИндексТекущегоЭлементаКоллекции+1].ПолучитьИдентификатор(); Иначе Сообщить("Низя!"); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КурсорВверх(Команда) ИндексТекущегоЭлементаКоллекции = ТЗОбъект.Индекс(Элементы.ТЗОбъект.ТекущиеДанные); Если ИндексТекущегоЭлементаКоллекции > 0 Тогда Элементы.ТЗОбъект.ТекущаяСтрока = ТЗОбъект[ИндексТекущегоЭлементаКоллекции-1].ПолучитьИдентификатор(); Иначе Сообщить("Низя!"); КонецЕсли; КонецПроцедуры |
|||
|
31
Phace
07.05.10
✎
19:55
|
(30) "Реквизита "НомерСтроки" может и не быть ..."
Это в каком случае? |
|||
|
32
ll13
07.05.10
✎
21:39
|
(31) Создайте реквизит формы ТЗ типа "ТаблицаЗначений" к примеру с одним столбцом типа текст. Перетащите ТЗ1 в Элементы, что бы она отображалась на форме.
В таком случае Элементы.ТЗ1.ТекущиеДанные.НомерСтроки - "Поле объекта не определено ..." хотя Элементы.ТЗ1.ТекущиеДанные определено и содержит ДанныеФормыЭлементКоллекции |
|||
|
33
Phace
07.05.10
✎
22:02
|
(32) Логично, но это потому что в ТЗ данных то нет, поэтому и неопределено, как только данные появятся и НомерСтроки, или я не прав (1С нет под рукой сейчас)?
|
|||
|
34
Phace
07.05.10
✎
22:03
|
*как только данные появятся, появится и НомерСтроки
|
|||
|
35
ll13
07.05.10
✎
22:21
|
(34) Не появиться, несколько раз проверял на НЕ пустой ТЗ ) ...
У Типа ДанныеФормыЭлементКоллекции нет встроенного свойства НомерСтроки, его свойства зависят от объекта которые он моделирует. Если он фактически ничего не моделирует, как в описанном ной случае, то и свойства такого у него нет. Из синтаксис-помощника: "Описание: Набор свойств элемента коллекции зависит от того, на основе какого объекта построена данная коллекция. Может включать в себя свойства, значениями которых будут являться другие универсальные структуры, универсальные коллекции и наборы записей." Но Вы всё равно проверьте, 8.2 такая штука - никому не верь, даже собственным глазам ) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |