Имя: Пароль:
1C
1С v8
Подскажите, как работает выбрать для справочника?
0 evorle145
 
21.02.13
11:19
Когда использую Справочники.Номенклатура.НайтиПоНаименованию(), то в параметрах могу указать точное соотвествие = Истина. Но если существует несколько элементов с указанным наименованием, то будет найден только один из них. А мне нужно получить все эти найденные элементы.
Поэтому делаю так:
НоменклатураС = Справочники.Номенклатура;
Отбор = Новый Структура("Наименование");
Отбор.ТипНоменклатуры = Файл.Значение;
Выборка = НоменклатураС.Выбрать(,,Отбор,);
Пока Выборка.Следующий()  Цикл
КонецЦикла;

Но вот вопрос: в этом случае я получу точное соответсвие или нет? Ведь здесь нет никакого параметра "точное соответствие" как в первом случае. Спасибо.
1 Галахад
 
гуру
21.02.13
11:20
Точное.
2 Maxus43
 
21.02.13
11:22
Юзай запросы, Выбрать не кошерно
3 evorle145
 
21.02.13
11:23
(1), спасибо. А это точно? Просто в справке ничего не сказано про это.
4 evorle145
 
21.02.13
11:23
(2),а запросом быстрее будет поиск осуществлять в моем случае?
5 Maxus43
 
21.02.13
11:25
(4) правильней будет.
А ещё лучше сразу всё запросом вытащить, и лучше не по наименованию конечно
6 evorle145
 
21.02.13
11:27
(5), понял, сейчас пробую все вытащить в одном запросе. К сожалению, кроме наименования ничего нет. Коды не совпадают (базы разные), артикулов нет.
7 Maxus43
 
21.02.13
11:29
(6) наименования тогда тоже не совпадают почти наверняка. Ну часть вытащиш, сотальное хз
8 evorle145
 
21.02.13
11:35
(7), Да, наименования частично не совпадают. Ну хотя бы часть вытащу. Сейчас оформляю все одним запросом. Спасибо за совет!
9 Reset
 
21.02.13
11:36
В запросе можно использовать подобно &Наименование+"%", тогда поиск будет как при "неточном соответствии" у найтиПоНаименованию
10 Maxus43
 
21.02.13
11:39
(9) частный случай, боюсь там не совпадает не конечные символы, а "Карандаш черный" и "Черный карандаш"
11 Reset
 
21.02.13
11:43
(10) Это да. Ну еще можно накидвать буковок в условия.
Я собственно хотел только в поддержку (2) высказаться
12 evorle145
 
21.02.13
11:56
ну вот результат готов: эта таблица где посчитано сколько найдено позиций соответствующих искомой номенклатуре.

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
Запрос.УстановитьПараметр("ТЗ", ТаблицаПроверка);
Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ
              |    ТЗ.Номенклатура,
              |    Ном.Наименование КАК НаименованиеИзНом,
              |    СУММА(ВЫБОР
              |            КОГДА Ном.Наименование ЕСТЬ NULL
              |                ТОГДА 0
              |            ИНАЧЕ 1
              |        КОНЕЦ) КАК Количество
              |ИЗ
              |    ТЗ КАК ТЗ
              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном
              |        ПО ТЗ.Номенклатура = Ном.Наименование
              |
              |СГРУППИРОВАТЬ ПО
              |    ТЗ.Номенклатура,
              |    Ном.Наименование";

Выборка = Запрос.Выполнить().Выбрать();
13 Галахад
 
гуру
21.02.13
12:01
(12) Или я тупой, или это то самое, что (0)
14 Maxus43
 
21.02.13
12:03
(13) да, тупой :)
в (0) выборка по каждой номенклатуре, в (12) вся куча вытаскивается
15 Галахад
 
гуру
21.02.13
12:05
(14) Куча 100% одинаковых?
16 Maxus43
 
21.02.13
12:05
(15) да
17 Галахад
 
гуру
21.02.13
12:06
(16) Ну да, тупой...
18 Maxus43
 
21.02.13
12:07
тут просто в одном запросе весь объём тащит, а не "выбрать()" в цикле по каждой.
Проблему несоответсвия наименований не решить автоматом полностью
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший