|   |   | 
| 
 | 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 - то это только в рознице катит, дальше такой штрихкод не передать.
  Или ты предлагаешь зарегистрировать в ЕАН и на каждый такой товар регистрировать ШК за свой счет? Реалии гораздо сложнее и интереснее теории... | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |