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