Имя: Пароль:
1C
1С v8
КД: Поиск объектов
,
0 varyag
 
08.07.14
07:40
Здравствуйте!
вопрос возможно глупый, но только что столкнулся с такой проблемой:
в правилах поиск номенклатуры происходит так:
Если СвойстваПоиска["ЭтоГруппа"] Тогда
    СтрокаИменСвойствПоиска = "Родитель,Наименование,ЭтоГруппа";
Иначе
    Если НомерВариантаПоиска = 1 тогда
        СтрокаИменСвойствПоиска = "Артикул";
    ИначеЕсли НомерВариантаПоиска = 2 тогда
        СтрокаИменСвойствПоиска = "Артикул, Наименование";
    КонецЕсли;
КонецЕсли;

но есть номенклатура с незаполненными артикулами, и вот такая номенклатура подставляется непонятно как.

Я думал что если поиском найдено несколько объектов, то он считается неудачным, тут же подставляется какая то лева номенклатура с пустым артикулом, а 2й ВариантПоиска не выполняется.

Так как все же поиск происходит? считается ли он удачным если найдено несколько объектов или нет?
1 vicof
 
08.07.14
07:57
если хоть один найден, значит поиск удачен
2 varyag
 
08.07.14
07:57
up Подскажите, кто точно знает как этот поиск происходит?
3 varyag
 
08.07.14
07:57
(1) т.е. если два то все равно удачен и он берет от фонаря?
4 varyag
 
08.07.14
08:38
up up! не логично же так искать!
5 SleepyHead
 
гуру
08.07.14
08:51
(2) Выполняется 10 попыток поиска, переменная НомерВариантаПоиска содержит как раз номер попытки.

В твоем примере - если не группа, то при первой попытке поиска выполняется поиск по артикулу, а если по артикулу не получилось, то по артикулу и наименованию.

Имхо, крайне неудачный алгоритм. Зачем при второй попытке искать по комбинации артикула и наименования, если такой артикул не найден вообще?
6 Defender aka LINN
 
08.07.14
08:58
(4) Что тут нелогичного?
КД не заморачивается тем, СКОЛЬКО она объектов нашла. Или нашла или нет, остальное ее не волнует.
А вот нелогично - это зная, что артикул пустой, что-то там по нему искать.
7 mooo
 
08.07.14
08:59
(1) прав, ищется первый попавшийся, в твоем случае лучше так: искать по артикулу, только если он есть:
Если СвойстваПоиска["ЭтоГруппа"] Тогда
    СтрокаИменСвойствПоиска = "Родитель,Наименование,ЭтоГруппа";
Иначе
    Если ЗначениеЗаполнено(СокрЛП(СвойстваПоиска["Артикул"])) Тогда
        СтрокаИменСвойствПоиска = "Артикул";
    Иначе
        СтрокаИменСвойствПоиска = "Наименование";
    КонецЕсли;
КонецЕсли;
8 SleepyHead
 
гуру
08.07.14
09:04
(7) Если хочется сохранить еще и структуру папок, то в строку имен свойств поиска неплохо бы добавить Родитель и ЭтоГруппа
9 mooo
 
08.07.14
09:13
(8) Да "ЭтоГруппа" при поиске по наименоваию обязятельно нужно, при поиске по артикулу - только если он есть и у групп. Насчет Родителя скользко, есть риск задваивания при переносе товара в другую группу в базе источника.
10 SleepyHead
 
гуру
08.07.14
09:15
(9) Ну и правильно, кому надо, вручную по группа растащат.
11 varyag
 
09.07.14
08:55
(5) это всё мне итак известно
(6) логично, потому что если артикул пустой то нужно искать по наименованию в пустым артикулом, чтобы исключить попадания в результат поиска номенклатуры с таким же наименованием, но с заполненным артикулом, что будет ошибкой
(7) Да, именно так уже и сделал:
Если СвойстваПоиска["ЭтоГруппа"] Тогда
    СтрокаИменСвойствПоиска = "Родитель,Наименование,ЭтоГруппа";
Иначе
    Если ЗначениеЗаполнено(СвойстваПоиска["Артикул"]) Тогда
        Если НомерВариантаПоиска = 1 тогда
            СтрокаИменСвойствПоиска = "Артикул, Наименование";
        ИначеЕсли НомерВариантаПоиска = 2 тогда
            СтрокаИменСвойствПоиска = "Артикул";
        КонецЕсли;
    Иначе
        СтрокаИменСвойствПоиска = "Наименование";
    КонецЕсли;
КонецЕсли;

Только вот думаю все же надо при пустом артикуле искать так:

СтрокаИменСвойствПоиска = "Артикул, Наименование";

чтобы исключить попадания номенклатуры с таким же наименованием но заполненным артикулом, я верно думаю?
12 Defender aka LINN
 
09.07.14
09:04
ЭтоГруппа ВСЕГДА надо в поля поиска добавлять.
13 varyag
 
09.07.14
09:08
(12) Зачем если у групп нет артикула? т.е. попадание группы исключается? или все таки если артикул незаполнен, то может найти группу?
14 varyag
 
09.07.14
09:09
Тогда так?
Если СвойстваПоиска["ЭтоГруппа"] Тогда
    СтрокаИменСвойствПоиска = "Родитель,Наименование,ЭтоГруппа";
Иначе
    Если ЗначениеЗаполнено(СвойстваПоиска["Артикул"]) Тогда
        Если НомерВариантаПоиска = 1 тогда
            СтрокаИменСвойствПоиска = "Артикул, Наименование";
        ИначеЕсли НомерВариантаПоиска = 2 тогда
            СтрокаИменСвойствПоиска = "Артикул";
        КонецЕсли;
    Иначе
        СтрокаИменСвойствПоиска = "Артикул, Наименование, ЭтоГруппа";
    КонецЕсли;
КонецЕсли;
15 Defender aka LINN
 
09.07.14
09:10
(13) В одном из вариантов у тебя поиск по наименованию, есличо.
16 varyag
 
09.07.14
09:11
(15) а последний вариант?
17 varyag
 
09.07.14
09:11
там надо это группа или необязательно?
18 varyag
 
09.07.14
09:13
я так вижу у элемента пустой артикул = "", у группы Артикул = NULL. т.е. не должна группа найтись. или ошибаюсь?
19 Defender aka LINN
 
09.07.14
09:36
(18) Пути 1С неисповедимы. Я всегда добавляю, ибо нуегона.
20 varyag
 
09.07.14
11:47
(19) Воистину)