Имя: Пароль:
1C
1C 7.7
v7: НайтиПоРеквизиту()
,
0 1С-ница
 
04.09.14
16:19
Бух учет 7.70.578
Платформа 7.70.027 (для SQL)
код:
Контрагент=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагент.НайтиПоРеквизиту("ИНН",ИНН,1) = 0 Тогда
    Сообщить("Контрагент с ИНН " + ИНН + " не найден в базе!");
КонецЕсли;


В отладчике Контрагент.НайтиПоРеквизиту("ИНН",ИНН,1) равно 0. Такой ИНН в справочнике есть.
У реквизита ИНН установлены галки "Сортировка" и "Отбор по реквизиту"установлены. Даже если в отладчике задать конкретное значение ИНН (правильное) - не находит.
1 1С-ница
 
04.09.14
16:35
Нашла причину, в поле с ИНН еще прописан КПП через \
2 пипец
 
04.09.14
16:36
еще может быть прописан и через /
ЗЫ есть обработка банк клиент - там этот поиск в полной красе
3 _fvadim
 
04.09.14
16:37
ааааа! бухия 7.7, да там есть такое :)
(взгрустнул по предыдущей работе)
4 1С-ница
 
04.09.14
16:41
Косяк в том, что не у всех указан КПП, а для поиска есть только ИНН. Остается только переборкой справочника(((
5 КонецЦикла
 
04.09.14
17:00
(4) Черный запрос на вхождение (смотри поиск по подстроке в ТиС)
...или прямой с like
6 Garykom
 
гуру
04.09.14
17:06
(5) дык все проще, вряд ли контрагентов больше 1000

так что в ТЗ все эти ИНН и разделить перед поиском

т.е. сначала всех обрабатываем, и потом быстро ищем по ТЗ

но это если несколько контрагентов нужно искать в цикле каком то например при загрузке, тогда заполнение ТЗ можно вынести перед циклом и будет очень быстро...
7 КонецЦикла
 
04.09.14
17:09
(6) Т.е. перебрать всех, запихнуть в ТЗ...
А потом искать в ТЗ (по сути это тоже перебор)?
Не быстрее ли тогда сразу смотреть содержимое строки?
8 Garykom
 
гуру
04.09.14
17:15
(7) не, перебираем то один раз всех контрагентов, а ищем потом мгновенно - скорость поиска по ТЗ = скорости поиска индекса таблицы

и искать сам элемент справочника не надо они уже все в ТЗ
9 КонецЦикла
 
04.09.14
17:36
(8) Штатная ТЗ не индексируется и скорость поиска зависит от положения строки :)
10 Garykom
 
гуру
04.09.14
17:53
(9) угу ну можно сделать не линейную ТЗ а https://ru.wikipedia.org/wiki/АВЛ-дерево :)

и заюзать свой "индексированный" поиск

но для <1000 строк поиск в обычной ТЗ (в памяти) быстрее чем поиск по индексу (на диске не SSD) в базе
11 ivsher
 
05.09.14
10:48
Да все это полумеры. Прямой запрос с Left() либо Like.
ну или можно поискать в строке символы "/", "\".