Имя: Пароль:
1C
1C 7.7
v7: Быстрый отбор элементов справочника с одинаковым реквизитом.
0 bizon2008
 
29.08.11
23:38
Доброе время суток. Никак не могу сообразить.Нужен алгоритм. Есть справочник. Товары. У товара есть реквизит штрихкод, он может быть одинаков у двух-трех. Мне надо быстрый отбор элементов справочника с одинаковым этим реквизитом.
НайтиПоРеквизиту находит только один.
1 Aleksey
 
29.08.11
23:47
Запрос?
2 bizon2008
 
30.08.11
00:05
(1)И шо? Потом перебором его искать чего он тама притащил.
3 Сияющий Асинхраль
 
30.08.11
00:08
ВыбратьЭлементыПоРеквизиту
4 andrewks
 
30.08.11
08:26
(2) чо?
5 smaharbA
 
30.08.11
08:28
можно и через отмену транзакции искать если хочется извращений
6 smaharbA
 
30.08.11
08:31
НачалоТранзакции();
Пока Спр.НайтиПоРеквизиту(Рекв)=1 Цикл
   Сп.ДобавитьЗначение(Спр.ТекущийЭлемент());
   Спр.Удалить(1);
КонецЦикла;
ОтменитьТранзакции();
7 Mikeware
 
30.08.11
08:44
(0) "Позовите программиста"©
8 andrewks
 
30.08.11
08:47
(6) ну, вы, мусье,.... короче, вы в курсе
9 YHVVH
 
30.08.11
08:48
(6) ужась
10 smaharbA
 
30.08.11
08:50
в курсе )
11 bizon2008
 
30.08.11
10:36
Вот чего хочу реализовать. Сканируем штрихкод, бежим в справочник товаров и там смотрим, если есть только один элемент, то его сразу подставляем в табличную часть документа, если два или больше, то выводим список на экран для выбора оператором, если ни одного, то ничего не делаем и выводит сообщение что нет такого.
Первый и третий вариант сделал. На втором завис.
Пока пробую запрос и ВыбратьЭлементыПоРеквизиту.
12 FN
 
30.08.11
10:45
(11) запрос отставить (если только не прямой).
Просто выбратьПоРеквизиту, потом Пока ПолучитьЭлемент и загоняй элементы в список или ТЗ
13 Ёпрст
 
30.08.11
10:52
(12) >>>Просто выбратьПоРеквизиту, потом Пока ПолучитьЭлемент

ну-ну..
14 FN
 
30.08.11
10:57
(13) что не так?
15 Ёпрст
 
30.08.11
10:59
(14) всё так, за найти по реквизиту померещилось
16 bizon2008
 
30.08.11
11:04
(12)База скульная, по логике запрос должен быть быстрее.
17 ЧеловекДуши
 
30.08.11
11:05
Организуй через цикл, команда: ВыбратьПоРеквизиту()
18 Ёпрст
 
30.08.11
11:09
(16) прямой да, будет быстрее. А так, найтиПоРеквизиту/ВыбратьЭлементыПоРеквизиту быстрее всего из штатного.
19 FN
 
30.08.11
11:09
(16) за это время мог бы уже и проверить.

Точно быстро будет что-то типа

       |SELECT
   |    Спр.ID AS [Элемент $Справочник.ТМЦ]
   |FROM
   |    $Справочник.ТМЦ AS Спр (NOLOCK)
   |WHERE
   |  Спр.IsFolder = 2 AND
   | $Спр.ШтрихКод ='"+ПеремШтриход+"'";
20 Ёпрст
 
30.08.11
11:12
(19) жалко, что в типовых, штрихкод у единицы измерения, а не у ТМЦ..
:)
21 bizon2008
 
30.08.11
11:19
(19)Пока загрузил 10000 позиций. Из них 600 три дубля, 400 два. Запрос медленней процентов на 10%. Но это локальная машина и однопользовалкий режим.
22 antoneus
 
30.08.11
11:22
select
спр.id [Элемент $Справочник.ТМЦ]
WHERE
 Спр.IsFolder = 2
group by id having count($Спр.ШтрихКод) > 1
23 antoneus
 
30.08.11
11:23
тоесть

select
id [Элемент $Справочник.ТМЦ]
from
$Справочник.ТМЦ Спр (nolock)
WHERE
 Спр.IsFolder = 2
group by id having count($Спр.ШтрихКод) > 1
24 FN
 
30.08.11
11:26
(23) и зачем? ему нужно найти конкретный штрихкод
25 Ёпрст
 
30.08.11
11:28
(23) group by id having count всё равно медленнее, чем обычный select + where
26 bizon2008
 
30.08.11
11:47
А есть механизм сразу выборку ВыбратьЭлементыПоРеквизиту загрузить в таблицу значений, или только построчный перебор?
Или узнать сколько элементов в этой выборке?
27 bizon2008
 
30.08.11
12:26
Подниму.
28 Mikeware
 
30.08.11
12:28
(26) Используй прямой запрос и успокойся.
29 FN
 
30.08.11
12:49
(26) Если операция разовая и много раз идет поиск, а дублированных штрихкодов не много то есть смысл сначала построить табличку с дублями и искать в ней.
Если что-то типа подбора или обработка со сканера ШК то лучше всего прямой запрос или выбрать по реквизиту
30 bizon2008
 
30.08.11
12:54
К сожалению возможности использования прямых запросов не будет.
31 bizon2008
 
30.08.11
12:56
(29)Домучил тесты. ВыбратьПоРеквизиту работает быстрей обычного запроса.
32 smaharbA
 
30.08.11
19:17
оно конечно все хорошо при выбрать, вот только сколь таких будет у автора и как будут "фильтрованные" индексы вести себя, когда полей десять будет
33 Мимохожий Однако
 
30.08.11
20:31
Почему штрихкоды одинаковые для разного товара?
34 Sk0rp
 
30.08.11
21:06
(33) Ты об этом у производителей поинтересуйся :)
По факту дохрена товара с одинаковыми штрих-кодами производителя. Иногда могут, к примеру, всю линейку лаков (100 цветов) одним штрих-кодом обклеить. А иногда могут довольно непохожие позиции.
35 Мимохожий Однако
 
30.08.11
21:09
Смысл штрихкода в уникальности. Для разного товара надо свои наклеивать при оприходовании.
36 FN
 
30.08.11
23:19
(35) если для этого использовать штрихкода начинающиеся на 2 - то это только в рознице катит, дальше такой штрихкод не передать.
Или ты предлагаешь зарегистрировать в ЕАН и на каждый такой товар регистрировать ШК за свой счет?

Реалии гораздо сложнее и интереснее теории...