Имя: Пароль:
1C
 
Туплю - как получить список отобранных в таблице
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) о то то ж!