Имя: Пароль:
1C
1C 7.7
v7: Как сделать цикл в справочнике после спр.НайтиПоРеквизиту(...)
0 IgorTrifonov
 
12.08.11
16:47
Всем Здрастьте!
Как бы перебрать записи после найденной
спр = СоздатьОбъект("Справочник.Детали");  // буква [m] - латинская M
спр.ПорядокРеквизита("для_поиска");
Если спр.НайтиПоРеквизиту("для_поиска",деталька, 1) = 1 Тогда
   Пока спр.для_поиска = деталька Цикл
       // тут что-то делаю
   КонецЦикла;
КонецЕсли;

использовать спр.ВыбратьЭлементыПоРеквизиту() боюсь будет очень медленно т.к. в спр-ке миллион записей
т.е. справочник выглядит так:
деталь состав
12345   абвгд
12345   ежзик
12345   лмноп
66789   что-то другое
66789   ещё что-то

подскажите пожалуйста
1 ДенисЧ
 
12.08.11
16:48
запрос некошерен?
2 andrewks
 
12.08.11
16:48
"Как бы перебрать записи после найденной "

а что, по-твоему, "после"?
3 vtolga
 
12.08.11
16:51
ПорядокРеквизита(<?>);
Синтаксис:
ПорядокРеквизита(<ИмяРеквизита>)
Назначение:
Установить порядок выборки элементов справочника по возрастанию значения реквизита.
Параметры:
<ИмяРеквизита> - строка с именем реквизита, по возрастанию значений которого выполняется выборка.
Замечание:
Метод может использоваться только для реквизита с установленным признаком Сортировка.
Метод вызывается до вызова метода ВыбратьЭлементы.
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
Подробнее см. в документации, глава 'Работа со Справочниками'
4 vtolga
 
12.08.11
16:52
(2) если (3), то "После"- это именно то, что нужно
5 IgorTrifonov
 
12.08.11
16:52
надо находить много деталей и узнавать их состав
т.е. я нахожу в спр-ке деталь 12345
и должен прочитать сотав этой детали, т.е
абвгд
ежзик
и т.д.

но деталей искать буду много
6 Mashinist
 
12.08.11
16:53
НайтиПоРеквизиту нормально работает
реквизит для этого должен быть индексирован

Ну запрос 1С всяко медленнее будет

Прямой запрос - самое оно

Но это если религия позволяет ВК использовать
7 IgorTrifonov
 
12.08.11
16:53
поэтому фильтровать ВыбратьЭлементыПоРеквизиту каждый раз справочник с миллионом записей будет дико медленно
8 vtolga
 
12.08.11
16:55
Ну и не фильтруй. Найди и бери те, что "После"
9 IgorTrifonov
 
12.08.11
16:56
а как перебирать после найденной
10 IgorTrifonov
 
12.08.11
16:57
если бы это был файл dbf. я бы написал спр.Следущая()
11 FN
 
12.08.11
17:09
(7) Проверил?
Вообще-то ВыбратьЭлементыПоРеквизиту  достаточно шустро работает, но если мало скорости используй прямой запрос.
12 FN
 
12.08.11
17:10
(11)+ прямой запрос - http://infostart.ru/public/20120/
13 Ёпрст
 
12.08.11
17:11
(7) быстро, даже на большем количестве элементов.
14 IgorTrifonov
 
12.08.11
17:15
В общем вы все правы, видимо ВыбратьЭлементыПоРеквизиту() не фильтрует, а делает то же и я хотел
- найти по индексу (отсортированному полю)
- и далее перемещаться пока значения индексированного поля совпадает с искомым

Спасибо!
Программист всегда исправляет последнюю ошибку.