![]() |
|
Туплю - как получить список отобранных в таблице | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
29.03.06
✎
18:47
|
То есть есть форма списка документов например.
Как получить только те документы, которые отобраны в текущий момент. Но для меня важнее, как это сделать для регистра сведений (набора записей)? |
|||
1
Широкий
29.03.06
✎
18:49
|
Отобраны через отбор?
|
|||
2
dimoff
29.03.06
✎
18:50
|
Запросом с условиями отбора
|
|||
3
Гений 1С
гуру
29.03.06
✎
18:54
|
(3) а попросче? Гдето я краем глаза видел, как это делаитца, но не нашел
|
|||
4
Гений 1С
гуру
29.03.06
✎
18:54
|
(1) правильно мыслите
|
|||
5
A 008
29.03.06
✎
18:54
|
ЭлементыФормы.Список.ВыделенныеСтроки
|
|||
6
A 008
29.03.06
✎
18:55
|
Пардон, если через отбор, то (2)
|
|||
7
Гений 1С
гуру
29.03.06
✎
18:57
|
(6) и че, по другому никак?
|
|||
8
Гений 1С
гуру
29.03.06
✎
18:57
|
Вообще то у меня задача удалить отобранные строки.
Могу я управлять позиционированием строк? т.е. перейти на первую удалить, опять перейти на первую, опять удалить до исчерпания строк??? |
|||
9
dimoff
29.03.06
✎
18:57
|
(7) А че смущает? Че, непосильная задача?
|
|||
10
dimoff
29.03.06
✎
18:58
|
(8) Нет
|
|||
11
dimoff
29.03.06
✎
19:01
|
Если надо удалить, то через набор записей. Ставишь отбор как в списке, Получить(), Очистить() и Записать(), строк меньше чем в этой ветке
|
|||
12
dimoff
29.03.06
✎
19:01
|
Получить() = Прочитать()
|
|||
13
Гений 1С
гуру
29.03.06
✎
19:05
|
Понимаешь. У меня документ корректировки движений регистров, там до фига разношерстных регистров.
Мне кажется вариант с удалением и позиционирование прикольнее, если конечно в 8-ке можно удалять и позиционироваться. |
|||
14
dimoff
29.03.06
✎
19:08
|
Понимаешь, разница для каждого регистра будет только в его имени, то есть
НаборЗаписей = РегистрыСведений{ИмяРегистра].СоздатьНаборЗаписей() а весь остальной код сукаблянах одинаковый. |
|||
15
dimoff
29.03.06
✎
19:13
|
УниверсальнаяФункция
НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); Для Каждого ЭлемОтбора ИЗ РегистрСведенийСписок.Отбор Цикл Если ЭлемОтбора.Использование Тогда ЗаполнитьЗначенияСвойств(НаборЗаписей.Отбор[ЭлемОтбора.Имя], ЭлемОтбора); КонецЕсли; НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НаборЗаписей.Записать(); |
|||
16
SilentMan
29.03.06
✎
19:39
|
(0) В репозитории ITLand есть пример такого действа. А чтоб ты вдруг не промахнулся: http://itland.ru/rep/index.php?id=467
|
|||
17
Гений 1С
гуру
30.03.06
✎
10:24
|
(14) у меня регистры всех 4 классов представлены... понимаешь ли - и накопления, и сведений и бухгалтерии и расчета.
За ИТЛанд спасибо конечно.... Поспрошаю на партнерском, можно ли управлять текущей строкой. |
|||
24
Sonic
30.03.06
✎
12:07
|
так воспользуйся наконец поиском и поймешь что другого способа нет
|
|||
25
Гений 1С
гуру
30.03.06
✎
12:19
|
(24) Я обратился на партнерский, возможно там чего подскажут. странно будет, если в 1С нельзя управлять текущей строкой
|
|||
26
Гений 1С
гуру
30.03.06
✎
13:00
|
Эврика, или все гениальное просто. Пример решения (сам придумал, между прочим):
//Задача - удалить все строки из табличного поля ТаблицаРегистра, которые отобраны отбором //ТаблицаРегистра - табличное поле формы ТаблицаРегистра=ЭлементыФормы[ТаблицаРегистраИмя]; //Т - данные элемента формы ТаблицаРегистра, имеют тип, например "РегистрНакопленияНаборЗаписей.ЗатратыБухгалтерскийУчет" Т=Неопределено; Выполнить("Т="+ТаблицаРегистра.Данные); //Список строк, которые удаляем СтрокиКУдалению=Новый Массив(); //Перебираем все строки источника данных Для Каждого Стр ИЗ Т Цикл //Пробуем у табличного поля поставить в качестве текущей строки текущую строку источника данных //Такое присваивание работает как ни странно даже для типа РегистрНакопленияЗапись.ЗатратыБухгалтерскийУчет //Т.е. даже для записей из набора записей работает ТаблицаРегистра.ТекущаяСтрока=Стр; //Если строка попадает в отбор, то текущая строка устанавливается, иначе остается прежней Если ТаблицаРегистра.ТекущаяСтрока=Стр Тогда СтрокиКУдалению.Добавить(Стр); //Здесь логика алгоритма - то, что в отборе, нужно удалить КонецЕсли; КонецЦикла; //Перебираем Для Каждого Стр ИЗ СтрокиКУдалению Цикл Т.Удалить(Стр); //Удаляем строку КонецЦикла; А кто-то тут не верил в мой гений. (24) А Соник писал, что другого способа нет, гыгыгы. |
|||
27
Гений 1С
гуру
30.03.06
✎
13:10
|
Опубликовал в книжке знаний.
v8: Как получить строки, отобранные отбором |
|||
28
Sonic
30.03.06
✎
13:11
|
а как ты думаешь что быстрее- твой способ или запрос? гыкальщик плин
|
|||
29
Гений 1С
гуру
30.03.06
✎
13:16
|
(28) Быстрее написать или быстрее работает, по моему разница в скорости несущественна. Кстати для (2) так и нет нормального решения в случае сложных отборов (не по значению), их надо писать страниц на несколько кода.
Ну Соник, речь не шла о том, есть быстрое решение или нет. Меня скорость устраивает. Ты божился, что другого решения нет, ты продул, с тебя вино "Тайна Херсонеса". :) |
|||
30
Sonic
30.03.06
✎
13:17
|
а может губозачаточную машинку тебе?
|
|||
31
Гений 1С
гуру
30.03.06
✎
13:18
|
(30) Ну так больше на гениев не наезжай, если за базар ответить не можешь!
|
|||
32
Sonic
30.03.06
✎
13:19
|
через жопу можно сделать что угодно. а данный способ именно через анус
|
|||
33
Vozhd
30.03.06
✎
13:19
|
(29) А если в качетсве данных не НаборЗаписей, а РегистрСведенийСписок?
P.S. через запрос кода меньше будет... |
|||
34
Sonic
30.03.06
✎
13:21
|
а если записей до ...
|
|||
35
Гений 1С
гуру
30.03.06
✎
13:22
|
(32) Это не через жопу, а конкретно, всего один перебор строк, без обращений к базе (обращение идет только к данным формы), так что не гони не завидуй.
Все равно работает на порядки быстрее человека, кликающего по DEL, так что решение имеет право быть. |
|||
36
Sonic
30.03.06
✎
13:23
|
ну сделал, молодец.. возьми с полки пирожок :)
|
|||
37
Гений 1С
гуру
30.03.06
✎
13:31
|
(36) о то то ж!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |