|
Получить таблицу значений после наложения отбора | ☑ | ||
---|---|---|---|---|
0
ildary
10.06.15
✎
13:00
|
Уважаемые специалисты, посоветуйте пожалуйста, как правильно сделать следующее - на форму выведена таблица значений, на которой пользователь может сделать отбор, например через поиск или через .ОтборСтрок
Как правильно получить строки, которые в данный момент видны у данной таблицы значений? Если перебирать сам объект ТЗ - то в нем будут и те строки, которые не видно. Я нагуглил метод ПроверитьСтроку() - но для его работы придется перебирать 2 ТЗ (на форме и ТЗ-источник данных). Есть ли способ проще? |
|||
1
DmitrO
10.06.15
✎
13:14
|
МассивОбобранныхСтрок = ТЗ.НайтиСтроки(Элементы.ТЗ.ОтборСтрок);
наверно так? |
|||
2
palpetrovich
10.06.15
✎
13:14
|
Ну дык, наверное
Строки = ТЗ.НайтиСтроки(Отбор); Для инд=1 по Строки.Количество() Цикл Строка = Строки[инд] ... |
|||
3
ildary
10.06.15
✎
13:24
|
(1)+(2) а если отбор был через поиск, а не ОтборСтрок()?
|
|||
4
ДенисЧ
10.06.15
✎
13:28
|
такая фигня делается через построитель запроса / отчёта.
С внешними данными и копированием отбора ТП в построитель |
|||
5
palpetrovich
10.06.15
✎
13:29
|
(3) а "Элементы.ТЗ.ОтборСтрок" разве не все-равно как именно был сделан отбор?
|
|||
6
DmitrO
10.06.15
✎
13:33
|
(3)на сколько я знаю, тогда никак, это одна из вещей которую уже давно "предъявляют 1С", а они забили..
|
|||
7
DmitrO
10.06.15
✎
13:50
|
как вариант решения, можно немного изменить принципам обработки..
строки отбираются явно для какой-то операции над ними, так вот, суть изменения в следующем: - а после поиска (который в УФ выглядит как отбор), заставить пользователей нажимать Ctrl+A (т.е. выделить все), выделяются какраз таки отобраные; - а эту операцию нужно делать всегда для выделенных строк; |
|||
8
DmitrO
10.06.15
✎
13:52
|
(7)+ научить их выделять строки также с Shift и Ctrl.
|
|||
9
ildary
10.06.15
✎
13:55
|
(6) если соавтор 1с++ и формекса говорит мне, что никак, то мне остается только пойти поплакать...
(7)+(8) а программно вызвать CTRL+A и снять выделение можно? |
|||
10
ОператорПК
10.06.15
✎
13:55
|
(4) + 1
|
|||
11
DirecTwiX
10.06.15
✎
13:56
|
Функция ПолучитьСтрокиСОтбором(ТолькоВыбранные = Ложь)
|
|||
12
ОператорПК
10.06.15
✎
13:56
|
Постр=Новый ПостроительЗапроса;
Постр.ИсточникДанных=Новый ОписаниеИсточникаДанных(ТабличноеПоле1); Постр.Выполнить(); РРР=Постр.Результат.Выгрузить(); |
|||
13
DmitrO
10.06.15
✎
14:00
|
(9)на счет формекса я тут не причем, зря меня в савторы записал.. а по 1с++, да, был грех :)
|
|||
14
Живой Ископаемый
10.06.15
✎
14:02
|
2(12) +100500
|
|||
15
DmitrO
10.06.15
✎
14:05
|
(14) мы тут вроде про УФ говорим
|
|||
16
DmitrO
10.06.15
✎
14:07
|
на ОФ, да можно так: (12)
|
|||
17
DirecTwiX
10.06.15
✎
14:09
|
(12) Фигня.
Откуда построитель узнает про отбор ТЧ? |
|||
18
DmitrO
10.06.15
✎
14:10
|
(9)программно снять выделение, это просто очистить выделенные строки у ТаблицыФормы, ну или оставить там одну, например первую.
|
|||
19
Михаил Козлов
10.06.15
✎
14:44
|
В ОФ для ТЧ использовал построитель, для ТЗ - ПроверитьСтроку().
|
|||
20
DirecTwiX
10.06.15
✎
15:05
|
(19) И как в построитель засунуть ТЧ?
|
|||
21
palpetrovich
10.06.15
✎
15:35
|
Обфчнве формы, ТабЧасть - на форме обработки. МассивСтрок получается согласно отбору:
Отбор = Новый Структура(); Для каждого ЭлементОтбора Из ЭлементыФормы.ТабЧасть.ОтборСтрок Цикл Если ЭлементОтбора.Использование Тогда Отбор.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); КонецЕсли; КонецЦикла; МассивСтрок = ТабЧасть.НайтиСтроки(Отбор); Для инд=0 по МассивСтрок.Количество()-1 Цикл ТекЗнач = МассивСтрок[инд]; КонецЦикла; |
|||
22
ЧеловекДуши
10.06.15
✎
15:41
|
(21) А на УФ не получается согласно отбору :)
|
|||
23
palpetrovich
10.06.15
✎
15:42
|
(22) на УФ "я не в курсе" (цы) :)
|
|||
24
DirecTwiX
10.06.15
✎
15:48
|
(21) Ну либо почти получается, если там неравенства есть)
(22) К счастью) |
|||
25
Живой Ископаемый
10.06.15
✎
16:01
|
2(17) Сначала попробуй, а потом уже будешь говорить "фигня".
|
|||
26
palpetrovich
10.06.15
✎
16:12
|
(25) а что пробовать? РРР получится без отбора
|
|||
27
Михаил Козлов
10.06.15
✎
16:14
|
(20) Похоже, наврал: нашел только для списков (документов, регистров).
|
|||
28
Classic
10.06.15
✎
16:31
|
(26)
Дык отбор в построитель тоже не мешало бы передать |
|||
29
palpetrovich
10.06.15
✎
16:45
|
(28) дык, речь за (12) ;)
|
|||
30
ildary
10.06.15
✎
22:26
|
Большое спасибо всем помогавшим, таки сделал через выделенные строки, причем получилось сделать без требования к оператору нажимать Ctrl+A, вот так:
Попытка Скрипт = Новый COMОбъект( "MSScriptControl.ScriptControl" ); Скрипт.Language = "vbscript"; Скрипт.AddCode( " |Sub RunSendKey() | Set WSHShell = CreateObject( ""WScript.Shell"" ) | WshShell.SendKeys ""^A"" |End Sub |" ); Скрипт.Run( "RunSendKey" ); Исключение КонецПопытки; только почему-то при первом вызове происходит выделение всех строк, но фактически выделенной (для программы) остается одна строка, при повторном нажатии на кнопку - раз уже все строки таблицы выделены - отрабатывается вся видимая таблица. Попробовал в скрипт вставить строку WScript.Sleep 300 - ругается на ошибку и не выполняется. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |