Имя: Пароль:
1C
1C 7.7
v7: Выбор строк в ТЗ
,
0 rain65
 
14.07.15
14:18
Имеется заполненная таблица значений. Одна из колонок - сотрудники. Причем количество строк порядка 5000, сотрудники часто повторяются. Как организовать отбор, чтобы спозиционировав курсор, например на Петрова Сергея Викторовича, вызвать процедуру и Все Петровы Сергеи Викторовичи сгруппировались в видимой части таблицы. Метод сортировка работает быстро, но после сортировки приходится опять скакать по таблице, т.е. отсортированные элементы попадают либо вниз , либо вверх таблицы . Мне же нужно, чтобы все они сразу были видны. Метод удаления строк, не удовлетворяющих условиям отбора, работает слишком медленно.
1 Дмитрий
 
14.07.15
14:20
(0) Сделать еще одну таблицу, где сотрудники не повторяются, ходить по ней, а в связанную таблицу выводить только строки по текущему сотруднику
2 palpetrovich
 
14.07.15
14:21
спозиционироваться гршь :)
текСотр = получитьЗначение(текстр)
сортировать(
стр = 0
найтиЗначение(текстр, стр, "сотр")
текущаяСтрока(стр)
3 rain65
 
14.07.15
14:56
(2) Спасибо за отзывчивость, Петрович:)
Только можно чуть подробнее, для деревянных? )
4 HawkEye
 
14.07.15
15:13
(3) вешаешь на формочку кнопку, на нее процедуру с кодом из (2)
встаешь курсором в ТЗ на нужную фамилию
жмешь кнопку..
профит.

второй вариант:
рядом с первой ТЗ, помещаешь вторую ТЗ свернутую по сотрудникам. ставишь курсорсор во второй ТЗ на нужного сотрудника - первая сортируется по этому сотруднику - код примерно такой-же как и в первом случае...

3-4 вариант
то-же самое, только не сортируешь а показываешь только те строчки где есть выбранный сотрудник... для этого - еще одну таблицу в памяти, и не удаляешь записи а добавляешь...
третий вариант:
5 palpetrovich
 
14.07.15
15:18
(3) чуть подробнее:
Сотрудник = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "Сотрудник");
ТЗ.Сортировать(Сотрудник);
стр = 0;
ТЗ.НайтиЗначение(Сотрудник, стр, "Сотрудник");
ТЗ.ТекущаяСтрока(стр);
6 palpetrovich
 
14.07.15
15:21
+(5) ТЗ.Сортировать(Сотрудник); читать как ТЗ.Сортировать("Сотрудник");
ну и формулу в ТЗ на форме КликПоТЗ()
в модуле:  
Процедура КликПоТЗ()
Сотрудник = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "Сотрудник");
ТЗ.Сортировать("Сотрудник");
стр = 0;
ТЗ.НайтиЗначение(Сотрудник, стр, "Сотрудник");
ТЗ.ТекущаяСтрока(стр);
КонецПроцедуры
7 rain65
 
14.07.15
15:31
Всем большое спасибо. Вроде получается.
8 rain65
 
17.07.15
16:17
Петрович, попробовал тебе на почту сообщение послать - адрес не корректный.
9 Garykom
 
гуру
17.07.15
16:20
а если сделать шо ТЗ со всеми данными "невидимо" и показывать на форме только то шо надо... наверно будет лучше?
10 rain65
 
17.07.15
16:22
Не...не будет лучше. Специфика задачи....
11 Garykom
 
гуру
17.07.15
16:28
(10) вообще то говорил именно про реализацию "Все Петровы Сергеи Викторовичи сгруппировались в видимой части таблицы"
а все остальные остались в невидимой
12 Garykom
 
гуру
17.07.15
16:29
(11) удаление строк очень медленно (особенно неправильное) в отличие от переноса/копирования

и да... если много записей делаются с фТЗ на форме, то сначала сделать ее невидимой... потом крутить/вертеть/добавлять/удалять и потом обратно сделать видимой
13 rain65
 
17.07.15
16:30
А...если так, тогда интересно. И каким образом это можно провернуть?
14 palpetrovich
 
17.07.15
16:38
(8) ага, там старый был, ломаный. поправил
15 Garykom
 
гуру
17.07.15
16:40
(13) объяснил же уже... свои 5 тыщ держишь в "Перем гтзДанные;"

кнопочки "показать всех" и "показать тока похожих"

"показать всех" переносит все из гтзДанные в фТЗ на форму

"показать тока похожих" берет фио из тек строки, отбирает похожих из гтзДанные, чистит фТЗ на форме и выводит туда тока похожих
16 rain65
 
17.07.15
16:45
Да я понял, просто не увидел предыдущего поста.
17 Serginio1
 
17.07.15
16:57
18 Serginio1
 
17.07.15
17:03
19 rain65
 
20.07.15
11:50
(14) Петрович, глянь пож-ста почту.