Имя: Пароль:
1C
1С v8
Поиск конкретной строки
, ,
0 Flempy
 
13.01.22
12:27
Например, имеется следующий массив строк "нипель hs28" и "нипель hs28-01"
как можно указать условие, чтобы при поиске строки "нипель hs28" не выдавало строку "нипель hs28-01"?
1 ДенисЧ
 
13.01.22
12:29
При каком поиске? Если указать в запросе = то ищет строго.
А где ты ищешь - мы не можем угадать
2 SuperMario
 
13.01.22
12:29
Свой поиск организуй через запрос.
3 SuperMario
 
13.01.22
12:29
(1) предполагаю, что на форме списка )
4 Flempy
 
13.01.22
12:34
(1) Для каждого строка из МассивСтрок Цикл
        Если СтрНайти(строка.Наименование, ИскомаяСтрока) Тогда
        строка.Наименование = СтрЗаменить(строка.Наименование, ИскомаяСтрока, "");
        КонецЕсли;        
    КонецЦикла
5 1Сергей
 
13.01.22
12:37
(4) Если строка.Наименование=ИскомаяСтрока Тогда
6 Flempy
 
13.01.22
12:38
(5) "Строка.наименование" не будет содержать только искомую строку
7 Kassern
 
13.01.22
12:42
(6) типа "нипель hs28" и "нипель hs28 черный" можно, а "нипель hs28-01" исключить так?
8 Flempy
 
13.01.22
12:43
Была мысль, проверять, чтобы слева и справа  искомой строки были пробелы и только тогда продолжать
Если СтрНайти(строка.Наименование, " " + ИскомаяСтрока + " ") Тогда
Однако справа не всегда будет стоять пробел и тогда условие не работает
9 Иванович Михаил
 
13.01.22
12:44
(8) Ты сформулируй задачу нормально.
10 Flempy
 
13.01.22
12:44
(7) да, все верно
11 Kassern
 
13.01.22
12:48
(8) ну так проанализируйте все варианты комбинаций возможных у вас в списках и придумайте алгоритм. В крайнем случае можно посмотреть в сторону регулярных выражений
12 Kassern
 
13.01.22
12:50
я так понимаю с получением артикулов и гуидов совсем бяда, что приходится по наименованию сопоставлять?
13 1Сергей
 
13.01.22
12:52
Основная задача какая? Что-то грузите извне?
14 Flempy
 
13.01.22
12:53
(12) Типа того. Но все равно, в данном случае я работаю только со строкой, а не с конкретной номенклатурой
15 Kassern
 
13.01.22
12:56
(14) строки разные бывают, те же xml/json тоже строка, но там можно без проблем уникальное поле для сопоставления указать
16 Flempy
 
13.01.22
12:58
(13) https://ibb.co/t2XW4LZ
Из поля "Тип резьбы" табличной части нужно перенести "HLST40" в поле "Типоразмер"
17 acht
 
13.01.22
12:59
(8)
ВсеДопустимыеРазделители = " ";
НаборСлов = СтрРазделить(ВРег(строка.Наименование), ВсеДопустимыеРазделители, Ложь);
Нашли = НаборСлов.Найти(ВРег(ИскомаяСтрока)) > 0;
18 Галахад
 
гуру
13.01.22
13:00
(8)
Если СтрНайти(строка.Наименование, " " + ИскомаяСтрока + " ")
   ИЛИ СтрНайти(строка.Наименование, " " + ИскомаяСтрока)  
   ИЛИ СтрНайти(строка.Наименование, ИскомаяСтрока)  Тогда
19 acht
 
13.01.22
13:00
<> Неопределено конечно же
20 acht
 
13.01.22
13:00
(18) А это еще проще
Если СтрНайти(" " + строка.Наименование + " ", " " + ИскомаяСтрока + " ") Тогда
21 Галахад
 
гуру
13.01.22
13:02
(20) Не пойдет
строка.Наименование = АА_А_А
ИскомаяСтрока = АА
22 Ryzeman
 
13.01.22
13:03
(16) как эта задача связана с (0)?

(8)  Что делать с "нипель hs28_зелёный"?

(18) По третьему условию найдётся и "нипель hs28-01". Первые два вообще зачем?
23 Ryzeman
 
13.01.22
13:05
(0) ответ в (11). Если у тебя все "неправильные" значения с добавлением -XX, то надо и придумывать алгоритм который их отфильтрует. Универсальных каких-то решений тут нет, потому что ХЗ что там в твоей базе как заполнено и задвоено.
24 Flempy
 
13.01.22
13:10
(22)
1. Напрямую
2. Не выводить, нужно найти лишь конкретную искомую строку
3. Да, согласен
25 Flempy
 
13.01.22
13:11
(23) Да, я понимаю, просто думал может есть какое-то универсальное решение
26 Ryzeman
 
13.01.22
13:14
(24) Проверка на равенство? Если строка.Наименование = ИскомаяСтрока Тогда
Но в (10) ты сам пишешь что надо что б находило несколько значений по одной строке поиска, нет?
В остальных случая какие могут быть универсальные решения, если "нипель hs28-01" это неправильная строка, а "нипель hs28-красный" это правильная, например?
27 Flempy
 
13.01.22
13:42
(26) https://ibb.co/t2XW4LZ
Искаться будет не вся строка, а в данном случае только HLST40 и соответственно, проверка на равенство не подходит.
"нипель hs28-красный" как раз таки не будет искомой строкой, просто в (7) не совсем удачный пример.
Нужно лишь два условия для выполнения моей задачи:
Искомая строка "hs28"
1. Если в строке которой я ищу, искомая строка будет обрамлена пробелами (например,под это условие подходит строка "нипель hs28 черный")
2. Либо если слева от искомой строки есть пробел, а справа строка закончена (в данном случае подходит "нипель hs28")
"нипель hs28-01" под эти условия не подходит, так и должно быть, однако я не знаю, как реализовать второе условие
28 pechkin
 
13.01.22
13:44
Подобно "%hs28 _пробел_%" или подобно "%hs28"
29 Flempy
 
13.01.22
13:47
наткнулся на "СтрЗаканчиваетсяНа()", как раз то что нужно.
Всем большое спасибо за помощь!
30 Ryzeman
 
13.01.22
14:03
(27) Вот если б ты сразу задачу так сформулировал, то скорее всего тебе бы помогли и быстрее)