Имя: Пароль:
1C
 
В таблице значений надо оставить только первые 50 строк.
0 Deahianaianyrto
 
08.06.16
10:41
Правильно ли я сделал?




    Если ТЗИсторииЗапросов.Количество() > 50 Тогда
        Для НомерСтроки = 51 По ТЗИсторииЗапросов.Количество() Цикл
            ТЗИсторииЗапросов.Удалить(51);
        КонецЦикла;
    КонецЕсли;
1 Deahianaianyrto
 
08.06.16
10:41
8.2
А как в 8.3?
2 Зая Бусечка
 
08.06.16
10:42
Вы запросе - выбрать первые 50
3 Cyberhawk
 
08.06.16
10:43
Неправильно

ТЗИсторииЗапросов.Удалить(51)
НомерСтроки туда передавай
4 Nuobu
 
08.06.16
10:44
(0)
ВремТЗ = ТЗИсторииЗапросов.ВыгрузитьКолонки();
Для Индекс = 0 По 50 Цикл
ЗаполнитьЗначенияСвойств(ВремТЗ.Добавить(), ТЗИсторииЗапросов [Индекс]);
КонецЦикла;
ТЗИсторииЗапросов = ВремТЗ;

А вообще - (2)
5 catena
 
08.06.16
10:44
(3)И на середине индекс выйдет за пределы...
6 Nuobu
 
08.06.16
10:45
(3) Учи мат часть.
7 Pistol
 
08.06.16
10:47
(0) Неправильно.
8 Wern
 
08.06.16
10:47
Пока тз.Количество()>50 Цикл
  тз.Удалить(тз.Количество()-1);
КонецЦикла;
9 Pistol
 
08.06.16
10:47
(8) удалить(49)
10 Borteg
 
08.06.16
10:48
(0) Если перебором то надо начинать перебор с конца, чтобы индекс не ушел за границы при удалении, а вообще лучше всего запросом или 4.
11 Wern
 
08.06.16
10:49
(9) Зачем удалять 50-ю строку если ТС нужно 50-ю строку оставить.
12 Радим1987
 
08.06.16
10:50
лучше запросом на эту ТЗ
13 Pistol
 
08.06.16
10:50
(6) иди учить арифметику, сколько итераций цикла у тебя в (4) будет. Матчасть видимо уже выучил
14 Радим1987
 
08.06.16
10:51
выбрать первые 50
*
из &ТЗ как ТЗ
15 Wern
 
08.06.16
10:52
(12) Запрос сначала перекинет эту тз на сервер баз данных, потом перекинет результат обратно с созданием новой тз. Куча накладных расходов.
16 Радим1987
 
08.06.16
10:52
на сервере без контекста
17 Зая Бусечка
 
08.06.16
10:52
(15) А у вас на тонком клиенте уже появилась ТЗ?
18 Pistol
 
08.06.16
10:52
(11) да, там строгое неравенство. Тогда (50)
19 Радим1987
 
08.06.16
10:54
(17) ты права (16) анулируется)
20 Nuobu
 
08.06.16
10:54
(13) 50 итераций
21 Радим1987
 
08.06.16
10:56
(20)  50 итераций начинается с "0"
22 Радим1987
 
08.06.16
10:56
23 Pistol
 
08.06.16
10:58
(21) С 1
24 Nuobu
 
08.06.16
10:58
(23) Я ошибся, будет 51 итерация.
25 Радим1987
 
08.06.16
11:00
СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс строки (нумерация с 0).
26 Pistol
 
08.06.16
11:03
(24) вообще идея для больших таблиц правильная. Только не так надо.
Надо набрать в массиве циклом 50 ссылок на строки и скопировать одним вызовом. И проверку на количество строк меньше 50
27 Nuobu
 
08.06.16
11:04
(26) Пиши код, нечего тут разглагольствовать.)0
28 Pistol
 
08.06.16
11:06
(27) мне и так на мобиле лень в кнопочки тыкать )
29 Радим1987
 
08.06.16
11:08
Запрос = Новый Запрос(
"выбрать первые 50
|*
|из &ТЗ как ТЗ";)
Запрос.УстановитьПараметр("ТЗ",ТЗ);
Результат = Запрос.Выполнить().Выбрать();
Тз.Очистить();
Пока результат.Следующий() цикл
ЗаполнитьЗначенияСвойств(Тз,Результат);
КонецЦикла
30 Nuobu
 
08.06.16
11:09
(29) Результат = Запрос.Выполнить().Выбрать();
Тз.Очистить();
Пока результат.Следующий() цикл
ЗаполнитьЗначенияСвойств(Тз,Результат);
КонецЦикла

ТЗ = Запрос.Выполнить().Выгрузить();
31 Радим1987
 
08.06.16
11:11
(30)  да ты прав
32 Pistol
 
08.06.16
11:12
(29) вот возьми таблицу в 100000 строк и объясни, зачем 99950 из них надо запихивать в базу данных?
33 Pistol
 
08.06.16
11:14
А потом можно еще будет всласть порассуждать какие именно 50 строк из исходных тебе вернутся при не указанной сортировке.
Закон Брукера: Даже маленькая практика стоит большой теории.