|
Отбор в ТЗ | ☑ | ||
---|---|---|---|---|
0
ikbokov
18.06.14
✎
15:35
|
из ЖР вытаскиваем пользователей кто сидит с одного компа, в итоге получаем ТЗ: колонки имя компа, пользователь. Хочу сделать красиво и потереть строчки с компами которые встречаются один раз за всю таблицу.
Как отобрать все уникальные значения в колонке? Конструктивная критика кривизны написания приветствуется) Процедура КнопкаВыполнитьНажатие(Кнопка) Фильтр = Новый Структура("ДатаНачала, ДатаОкончания"); Фильтр.ДатаНачала = НачПериода; Фильтр.ДатаОкончания = КонПериода; ТЗ = Новый ТаблицаЗначений; ВыгрузитьЖурналРегистрации(ТЗ, Фильтр, "Дата, ИмяПользователя, Компьютер, Сеанс"); ТЗ.Сортировать("ИмяПользователя Возр,Дата Возр"); Счетчик = 0; Пока Счетчик < (ТЗ.Количество()-1)Цикл СтрокаПольз = ТЗ.Получить(Счетчик); Если СтрокаПольз.ИмяПользователя = ТЗ.Получить(Счетчик+1).ИмяПользователя И СтрокаПольз.Компьютер = ТЗ.Получить(Счетчик+1).Компьютер Тогда ИндексСтр = ТЗ.Индекс(СтрокаПольз); ТЗ.Удалить(ИндексСтр); Иначе Счетчик = Счетчик + 1; КонецЕсли; КонецЦикла; ТЗ.Сортировать("Компьютер"); ТЗ.ВыбратьСтроку(); КонецПроцедуры |
|||
1
Maxus43
18.06.14
✎
15:37
|
запросом делай, группируй, итоги навешивай, условия
|
|||
2
ikbokov
18.06.14
✎
15:39
|
(1) эх, а так хотелось парой строчек отделаться, спасибо)
|
|||
3
Maxus43
18.06.14
✎
15:43
|
(2) в запросе как раз меньше будет.
используюя ИМЕЮЩИЕ - вычисляются все компы встречающиеся 1 раз, потом по списук удалишь. Или просто отбор на них поставь |
|||
4
ikbokov
19.06.14
✎
12:16
|
Ругается на первый запрос что "Тип не может быть выбран в запросе", Но я же правильно понимаю что ВыгрузитьЖурналРегистрации создает ТЗ с типизированными колонками? где косяк?
Как-то так: Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ТЗ.ИмяПользователя Пользователь, | ТЗ.Компьютер Компьютер |ПОМЕСТИТЬ ВТЗ |ИЗ &ТЗ ТЗ"; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТЗ",ТЗ); Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.Текст = " |ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТЗ.Пользователь) Пользователь, | ВТЗ.Компьютер |ИЗ ВТЗ ВТЗ |СГРУППИРОВАТЬ ПО |ВТЗ.Компьютер"; Запрос2.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц; Результат = Запрос2.Выполнить(); ТЗ2 = Результат.Выгрузить(); ТЗ2.ВыбратьСтроку(); |
|||
5
Фокусник
19.06.14
✎
12:25
|
(4) "создает ТЗ с типизированными колонками? где косяк? "
Возможно, там тип "строка неограниченной длины", тогда нужно в запросе её через ВЫРАЗИТЬ(... КАК СТРОКА (...)) |
|||
6
Fragster
гуру
19.06.14
✎
12:28
|
(4) там колонка Пользователь - уникальныйИдентификатор. Он разве может быть выбран в запросе? Ну и про строку неограниченной длины, по которой группировать нельзя, надо Выразить() как в (5)
|
|||
7
ikbokov
19.06.14
✎
12:32
|
(5) Спасибо, ща попробую
(6) Колонка ИмяПользователя, у нее тип Строка тоже |
|||
8
Fragster
гуру
19.06.14
✎
12:33
|
(7) Попутал с "Пользователь"
|
|||
9
ikbokov
19.06.14
✎
12:40
|
|ВЫБРАТЬ
| ВЫРАЗИТЬ(ТЗ.ИмяПользователя как Строка (100)) ИмяПользователя, | ВЫРАЗИТЬ(ТЗ.Компьютер как Строка (30)) Компьютер Ругается теперь что Несовместимые типы "ВЫРАЗИТЬ" <<?>>ВЫРАЗИТЬ(ТЗ.ИмяПользователя как Строка (100)) ИмяПользователя, |
|||
10
Kamas
19.06.14
✎
12:55
|
(0) как вариант можно без запроса скопировать таблицу добавь колонку в тз Заполнить "1" свернуть по пользователю отбор по добавленной колонке на 1 у тебя есть список пользователей которые встречаются один раз удалить строки из исходной таблицы с этими пользователями
|
|||
11
Рэйв
19.06.14
✎
13:03
|
(0) КАк вариант
1.Сделай копию своей ТЗ всторонке. 2.Через .НайтиСтроки(Новый Структура("<ИменаОтборов>",<значения отборов>)) получи массив нужных строк. 3. Уддали из ТЗ те строки, которые не входят в массив. При смене значений отборов, скопируй эталонную ТЗ из п.1 в ту, с которой работаешь и дальше начиная с п.2 |
|||
12
ikbokov
19.06.14
✎
13:26
|
(11) а на (9) есть мысли? я думал запросами определить нужные компы и потом отбором из тз их вытащить просто
|
|||
13
Рэйв
19.06.14
✎
13:28
|
(12)В запросе к ТЗ много всяких ограничений.
|
|||
14
Рэйв
19.06.14
✎
13:28
|
(12).НайтиСтроки как раз и вытаскивает то что тебе надо
|
|||
15
Kamas
19.06.14
✎
13:45
|
(11) отбор на уникальность как обеспечить??
|
|||
16
ikbokov
19.06.14
✎
15:04
|
По поводу(9) :
Решил проблему через Ж)): Массив1 = Новый Массив; Массив1 = ТЗ.ВыгрузитьКолонку("Компьютер"); Массив2 = Новый Массив; Массив2 = ТЗ.ВыгрузитьКолонку("ИмяПользователя"); ТаблЗН = Новый ТаблицаЗначений; ТаблЗН.Колонки.Добавить("Компьютер", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(30))); ТаблЗН.Колонки.Добавить("ИмяПользователя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100))); Для Н=1 По Массив1.Количество() Цикл ТаблЗН.Добавить(); КонецЦикла; ТаблЗН.ЗагрузитьКолонку(Массив1,"Компьютер"); ТаблЗН.ЗагрузитьКолонку(Массив2,"ИмяПользователя"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |