Имя: Пароль:
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 строк из исходных тебе вернутся при не указанной сортировке.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn