Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как осуществить поиск телефона по нескольким цифрам в 1С 7.70.003 торговля склад для Украины?          
ZUBR Подменю пользователя
сообщение 18.12.19, 17:06
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

Здравствуйте. Можно ли осуществить поиск телефона, или серийного номера, или иного строкового реквизита по его части? То есть, например, ищешь телефолн и вводишь 4 последние цифры, и поиск выдает все номера телефонов, в которых эта комбинация цифр встречается? Потому что сейчас он ищет только по полному номеру.
Если ввести часть номера, ничего не находит.
Спасибо!

andrew76 Подменю пользователя
сообщение 18.12.19, 17:20
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Добрый вечер !

Используйте в цикле перебора элементов функцию Прав().

Прав(<?>,)
Синтаксис:
Прав(<Строка>,<Число>)
Назначение:
Возвращает cтроку, содержащую последние (самые правые) символы текстовой строки.
Параметры:
<Строка> - строка, содержащая извлекаемые символы;
<Число> - количество символов, которое должна вернуть функция.

Пока Контрагенты.ПолучитьЭлемент()=1 Цикл

Если Прав(СокрЛП(Контрагенты),4)=НужнаяЧастьНомера тогда  
       Сообщить(Контрагенты.Наименование);
КонецЕсли;

КонецЦикла;

Спасибо сказали: ZUBR,

mut Подменю пользователя
сообщение 18.12.19, 17:47
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

Ну или функцией Найти() если нужно по любой части строки

Если Найти(Клиент.Телефон, Цифры) > 0 Тогда
...

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 21.12.19, 11:09
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

mut @ 18.12.19, 17:47 * ,
Не получается по любой части строки по любому количеству цифр. Ищет только по полному номеру.
Расх.ВыбратьДокументы(НачДата,КонДата);
            Пока Расх.ПолучитьДокумент()=1 Цикл
                Если (Найти(Расх.Телефон,Телефон)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс)  Тогда  
                    ТЗ.НоваяСтрока();
                    ТЗ.Модель = Расх.Модель;
      ............................................................................................................................


Реквизит Расх. Телефон имеет тип строка 48 символов в расходной накладной.
Реквизит Телефон имеет такой же тип. Это реквизит поле ввода в диалоге созданного отчета Поиск.
Мне нужно, чтобы осуществлялся поиск любой комбинации любого количества цифр и при нахождении выдавалась, как положено, единица.
Например, вводится в поле ввода 067. И находятся все документы с номерами телефона, где встречается 067 в любом месте номера. Можно ли такое сделать? Спасибо!

andrew76 Подменю пользователя
сообщение 21.12.19, 16:48
Сообщение #5

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

ZUBR @ Сегодня, 14:09 * ,

Попробуйте использовать функцию удаления лишних пробелов СокрЛП().
Только если в базе много контрагентов, обрабатывать будет не очень быстро.

Телефон=СокрЛП(Телефон);  //убирает лишние пробелы справа и слева
Расх.ВыбратьДокументы(НачДата,КонДата);
            Пока Расх.ПолучитьДокумент()=1 Цикл
                Если (Найти(Расх.Телефон,Телефон)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс)  Тогда  
                    ТЗ.НоваяСтрока();
                    ТЗ.Модель = Расх.Модель;

Спасибо сказали: ZUBR,

mut Подменю пользователя
сообщение 21.12.19, 19:41
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

ZUBR @ Сегодня, 11:09 * ,
Невнимательно смотрели пример
Не «равно единице», а «больше нуля»

Спасибо сказали: ZUBR,

mut Подменю пользователя
сообщение 22.12.19, 12:47
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

Цитата(ZUBR @ 21.12.19, 11:09) *
Реквизит Расх. Телефон имеет тип строка 48 символов в расходной накладной.
Реквизит Телефон имеет такой же тип. Это реквизит поле ввода в диалоге созданного отчета Поиск.


У строковых реквизитов перед поиском нужно обрезать пробелы.

Если (Найти(Расх.Телефон,СокрЛП(Телефон))>0) и (Расх.СтатусЗаказа <> Перечисление.Статусы.Акс) Тогда

Спасибо сказали: ZUBR,

andrew76 Подменю пользователя
сообщение 24.12.19, 12:30
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

Цитата(mut @ 22.12.19, 15:47) *
Если (Найти(Расх.Телефон,СокрЛП(Телефон))>0)


Лучше избавиться от пробелов до начала работы цикла и выполнения условия.
А то получится выражение каждый раз при прогоне цикла будет вычисляться снова-
если в базе 1000 контрагентов,то 1000 раз будут убираться пробелы из переменной Телефон.

Спасибо сказали: ZUBR,

mut Подменю пользователя
сообщение 24.12.19, 15:52
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

andrew76 @ Сегодня, 12:30 * ,
Ну тогда уж ни в коем случае не таким способом:

Телефон = СокрЛП(Телефон);


Если Телефон - реквизит формы, никакого удаления не произойдет. Нужна новая переменная.

Спасибо сказали: ZUBR,

andrew76 Подменю пользователя
сообщение 24.12.19, 16:30
Сообщение #10

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

mut @ Сегодня, 18:52 * ,

Ладненько,уговорили: 32000000.gif

Телефон_=СокрЛП(Телефон);  //убирает лишние пробелы справа и слева
Расх.ВыбратьДокументы(НачДата,КонДата);
            Пока Расх.ПолучитьДокумент()=1 Цикл
                Если (Найти(Расх.Телефон,Телефон_)=1)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс)  Тогда  
                    ТЗ.НоваяСтрока();
                    ТЗ.Модель = Расх.Модель;


Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 26.12.19, 14:48
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

mut @ 21.12.19, 19:41 * ,
А почему больше нуля? Как я понимаю, при нахождении функция поиск дает единицу, а при ненахождении - нуль.
Я из тех, кто хочет понимать все, что делает)). Спасибо!))

Господа, спасибо большое за много ответов. Всех вас уважаю. Если сделаю, отпишусь. icon_beer17.gif

andrew76 Подменю пользователя
сообщение 26.12.19, 15:25
Сообщение #12

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

ZUBR @ Сегодня, 17:48 * ,

Найти(<?>,)
Синтаксис:
Найти(<Строка1>,<Строка2>)
Назначение:
Возвращает позицию первого вхождения в строку поиска заданной подстроки.
Параметры:
<Строка1> - строка в которой ищем (место поиска);
<Строка2> - строка которую ищем (шаблон поиска).
Замечание:
Если не находит - возвращает число 0.
Первая позиция имеет индекс 1.

Телефон_=СокрЛП(Телефон);  //убирает лишние пробелы справа и слева
Расх.ВыбратьДокументы(НачДата,КонДата);
            Пока Расх.ПолучитьДокумент()=1 Цикл
                Если (Найти(Расх.Телефон,Телефон_)>0)и(Расх.СтатусЗаказа <> Перечисление.Статусы.Акс)  Тогда  
                    ТЗ.НоваяСтрока();
                    ТЗ.Модель = Расх.Модель;

Спасибо сказали: ZUBR,

ZUBR Подменю пользователя
сообщение 08.01.20, 10:29
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

Спасибо, все получилось. Интересно, что без СокрЛП не работает. Хоть пробелов и нет.

andrew76 Подменю пользователя
сообщение 08.01.20, 12:13
Сообщение #14

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

ZUBR @ Сегодня, 13:29 * ,

Надо в отладчике посмотреть,может и есть.Или пробелы начинают участвовать в поиске номера телефона.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 15:36
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!