Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
Здравствуйте. Можно ли осуществить поиск телефона, или серийного номера, или иного строкового реквизита по его части? То есть, например, ищешь телефолн и вводишь 4 последние цифры, и поиск выдает все номера телефонов, в которых эта комбинация цифр встречается? Потому что сейчас он ищет только по полному номеру. Если ввести часть номера, ничего не находит. Спасибо!
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
mut @ 18.12.19, 17:47
, Не получается по любой части строки по любому количеству цифр. Ищет только по полному номеру.
Расх.ВыбратьДокументы(НачДата,КонДата); Пока Расх.ПолучитьДокумент()=1 Цикл Если (Найти(Расх.Телефон,Телефон)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда ТЗ.НоваяСтрока(); ТЗ.Модель = Расх.Модель; ............................................................................................................................
Реквизит Расх. Телефон имеет тип строка 48 символов в расходной накладной. Реквизит Телефон имеет такой же тип. Это реквизит поле ввода в диалоге созданного отчета Поиск. Мне нужно, чтобы осуществлялся поиск любой комбинации любого количества цифр и при нахождении выдавалась, как положено, единица. Например, вводится в поле ввода 067. И находятся все документы с номерами телефона, где встречается 067 в любом месте номера. Можно ли такое сделать? Спасибо!
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
ZUBR @ Сегодня, 14:09
,
Попробуйте использовать функцию удаления лишних пробелов СокрЛП(). Только если в базе много контрагентов, обрабатывать будет не очень быстро.
Телефон=СокрЛП(Телефон); //убирает лишние пробелы справа и слева Расх.ВыбратьДокументы(НачДата,КонДата); Пока Расх.ПолучитьДокумент()=1 Цикл Если (Найти(Расх.Телефон,Телефон)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда ТЗ.НоваяСтрока(); ТЗ.Модель = Расх.Модель;
Группа: Пользователи
Сообщений: 200
Из: Новая Каховка
Спасибо сказали: 205 раз
Рейтинг: 240.1
Цитата(ZUBR @ 21.12.19, 11:09)
Реквизит Расх. Телефон имеет тип строка 48 символов в расходной накладной. Реквизит Телефон имеет такой же тип. Это реквизит поле ввода в диалоге созданного отчета Поиск.
У строковых реквизитов перед поиском нужно обрезать пробелы.
Если (Найти(Расх.Телефон,СокрЛП(Телефон))>0) и (Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
Цитата(mut @ 22.12.19, 15:47)
Если (Найти(Расх.Телефон,СокрЛП(Телефон))>0)
Лучше избавиться от пробелов до начала работы цикла и выполнения условия. А то получится выражение каждый раз при прогоне цикла будет вычисляться снова- если в базе 1000 контрагентов,то 1000 раз будут убираться пробелы из переменной Телефон.
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
mut @ Сегодня, 18:52
,
Ладненько,уговорили:
Телефон_=СокрЛП(Телефон); //убирает лишние пробелы справа и слева Расх.ВыбратьДокументы(НачДата,КонДата); Пока Расх.ПолучитьДокумент()=1 Цикл Если (Найти(Расх.Телефон,Телефон_)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда ТЗ.НоваяСтрока(); ТЗ.Модель = Расх.Модель;
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 0
mut @ 21.12.19, 19:41
, А почему больше нуля? Как я понимаю, при нахождении функция поиск дает единицу, а при ненахождении - нуль. Я из тех, кто хочет понимать все, что делает)). Спасибо!))
Господа, спасибо большое за много ответов. Всех вас уважаю. Если сделаю, отпишусь.
Группа: Пользователи
Сообщений: 460
Из: Казахстан
Спасибо сказали: 45 раз
Рейтинг: 45
ZUBR @ Сегодня, 17:48
,
Найти(<?>,) Синтаксис: Найти(<Строка1>,<Строка2>) Назначение: Возвращает позицию первого вхождения в строку поиска заданной подстроки. Параметры: <Строка1> - строка в которой ищем (место поиска); <Строка2> - строка которую ищем (шаблон поиска). Замечание: Если не находит - возвращает число 0. Первая позиция имеет индекс 1.
Телефон_=СокрЛП(Телефон); //убирает лишние пробелы справа и слева Расх.ВыбратьДокументы(НачДата,КонДата); Пока Расх.ПолучитьДокумент()=1 Цикл Если (Найти(Расх.Телефон,Телефон_)>0)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда ТЗ.НоваяСтрока(); ТЗ.Модель = Расх.Модель;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!