|
Обработка строк в запросе | ☑ | ||
---|---|---|---|---|
0
1С-ница
05.02.13
✎
17:21
|
УТ 11 ред (11.0.4.5)
Необходимо в запросе искать номенклатуру с подобным артикулом (из 2-ух таблиц) Вот фрагмент кода: ВЫБОР КОГДА ПоложительныеОстатки.НоменклатураАртикул = ОтрицательныеОстатки.НоменклатураАртикул ТОГДА ОтрицательныеОстатки.НоменклатураАртикул ИНАЧЕ ВЫБОР КОГДА ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит - 1) ПОДОБНО ПОДСТРОКА(ПоложительныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит - 1) ТОГДА ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит - 1) КОНЕЦ КОНЕЦ |
|||
1
1С-ница
05.02.13
✎
17:23
|
В строке
ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит - 1) нужно в качестве длины строки задавать число от ПоложительныеОстатки.ДлинаАртикулаПоложит до &МинДлинаАртикула с шагом 1 как сделать? |
|||
2
GANR
05.02.13
✎
17:25
|
Функция языка запросов ПОДОБНО. Не?
|
|||
3
1С-ница
05.02.13
✎
17:53
|
(2) ПОДОБНО я и так использую в запросе
|
|||
4
Reset
05.02.13
✎
17:56
|
(3) Опиши задачу лучше.
По твоему запросу сложно догадаться, что тебе нужно |
|||
5
GANR
05.02.13
✎
18:04
|
(3) Может здесь v8: Запрос сможете идеи почерпнуть? Особенно сообшение №14, там есть дробление строки на символы и есть алгоритм генерации числовой последовательности.
|
|||
6
1С-ница
05.02.13
✎
18:28
|
(4)
Необходимо в запросе найти дубли номенклатуры у которых незначительно отличаются артикулы? Например: Номенклатура 1 арт Х-1234 Номенклатура 2 арт Х-1233 Номенклатура 3 арт Х-1243 Задается минимальная длина артикула, которая должна совпадать |
|||
7
1С-ница
05.02.13
✎
18:31
|
Максимальная длина артикула, заданного в типовой УТ = 25 (думаю наврят ли кому то будет необходимо увеличивать это число)
|
|||
8
1С-ница
05.02.13
✎
18:36
|
(5) в приведенном коде как я поняла считается количество символов в строке, я считала символы таким образом:
ВЫБОР КОГДА СвободныеОстаткиОстатки.Номенклатура.Артикул = ПОДСТРОКА(СвободныеОстаткиОстатки.Номенклатура.Артикул, 1, 1) ТОГДА 1 ИНАЧЕ ВЫБОР КОГДА СвободныеОстаткиОстатки.Номенклатура.Артикул = ПОДСТРОКА(СвободныеОстаткиОстатки.Номенклатура.Артикул, 1, 2) ТОГДА 2 и т д до 25 |
|||
9
Михаил Козлов
05.02.13
✎
18:37
|
(6) Посмотрите, как реализовано в ПоискИЗаменаДублирующихсяЭлементов при частичном совпадении.
|
|||
10
GANR
05.02.13
✎
18:39
|
(8) Ну да. Символы должны начиная с первого?
|
|||
11
1С-ница
05.02.13
✎
18:41
|
(10) этот код у меня получился, я для примера привела
(9) Посмотрю, спасибо за совет!! |
|||
12
МихаилМ
05.02.13
✎
18:42
|
зачем это пытаться решить в рамках запроса?
спокойно обработайте после получения. |
|||
13
GANR
05.02.13
✎
18:42
|
(11) Символы должны с о в п а д а т ь начиная с первого? Или внутри артикула тоже надо искать повторяющиеся последовательности?
|
|||
14
1С-ница
05.02.13
✎
18:43
|
(13) Символы должны совпадать начиная с первого
|
|||
15
1С-ница
05.02.13
✎
18:46
|
(12)сначала я и пыталась это обработать после запроса, но не нашла простого способа
Метод Найти для таблицы значений ищет точную копию искомой строки Тем более получается очень громоздко |
|||
16
GANR
05.02.13
✎
18:49
|
(14) Вот теперь задача ясна. А так?
ВЫБОР КОГДА СвободныеОстаткиОстатки.Номенклатура.Артикул = ПОДСТРОКА(СвободныеОстаткиОстатки.Номенклатура.Артикул, 1, 1) ТОГДА ВЫБОР КОГДА СвободныеОстаткиОстатки.Номенклатура.Артикул = ПОДСТРОКА(СвободныеОстаткиОстатки.Номенклатура.Артикул, 2, 1) ТОГДА ВЫБОР ... КОНЕЦ ИНАЧЕ 2 КОНЕЦ ИНАЧЕ 0 КОНЕЦ |
|||
17
GANR
05.02.13
✎
18:51
|
(16) Только если нужно проверять очень много первых символов - надо копать в сторону (5).
|
|||
18
GANR
05.02.13
✎
18:56
|
(15) В (16) поле запроса, в котором содержится количество совпавших первых символов. А уже на него можно накладывать отбор.
|
|||
19
GANR
05.02.13
✎
19:01
|
(16) Ой ёёёёё. Это совершенно не рабочее - запутался второпях.
|
|||
20
1С-ница
05.02.13
✎
19:03
|
(16) Попробую объяснить на пальцах
Есть Номенклатура 1 с артикулом Х-1234 Номенклатура 11 с артикулом Х-1243 Номенклатура 12 с артикулом Х-1233 Для Номенклатуры 1 надо найти дубли Ищем так: 1. ищем полное совпадение по артикулу 2. от артикула Х-1234 снимаем справа 1 символ, остается Х-123 3. ищем среди остальной номенклатуры, есть ли подобные артикулы (в нашем случае Номенклатура 11 и Номенклатура 12 подходят) 4. если не нашли, снимаем еще 1 символ у артикула Номенклатуры 1 (остается Х-12) (остаток символов не может быть меньше заданного Минимального числа символов) |
|||
21
YuPetr
05.02.13
✎
19:26
|
Можно сформировать текст запроса в цикле:
Текст=""; Для й=минДлинаАртикула по МаксДлиннаАртикула Цикл Текст=Текст+"Когда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, "+й+"+) = ПОДСТРОКА(ПоложительныеОстатки.НоменклатураАртикул, 1, "+й+"+) |тогда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, "+й+"+) " КонецЦикла потом вставить в текст запроса: ВЫБОР КОГДА ПоложительныеОстатки.НоменклатураАртикул = ОтрицательныеОстатки.НоменклатураАртикул ТОГДА ОтрицательныеОстатки.НоменклатураАртикул ИНАЧЕ ВЫБОР "+Текст+" КОНЕЦ КОНЕЦ |
|||
22
1С-ница
05.02.13
✎
19:43
|
(22) спасибо, думала над таким вариантом
Методологически это не будет плохим решением? |
|||
23
Reset
05.02.13
✎
19:56
|
В качестве изврата перед уходом домой:
Вроде должен искать и считать совпадения с &МинДлина и более, при условии что длина артикулов одинаковая. |
|||
24
1С-ница
06.02.13
✎
08:52
|
(21) Как бы мне организовать такой цикл:
Для й = - ПоложительныеОстатки.ДлинаАртикулаПоложит + 1 по МинДлинаАртикула ? |
|||
25
1С-ница
06.02.13
✎
09:50
|
Хочу организовать обратный цикл, брать максимально возможное кол-во символов в артикуле (25) наверное не хорошо, т к в реале используются от 6 до 12 символов
|
|||
26
Reset
06.02.13
✎
10:00
|
(25) делать (12) существенно проще чем то, что ты пыташься
|
|||
27
mikecool
06.02.13
✎
10:02
|
динамически собрать текст запроса?
|
|||
28
1С-ница
06.02.13
✎
10:03
|
Придумала так:
Для й = 1 По МинДлинаАртикула Цикл Текст = Текст+"Когда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит -"+й+"+) = ПОДСТРОКА(ПоложительныеОстатки.НоменклатураАртикул, 1, "+й+"+) |тогда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит -"+й+"+) "; КонецЦикла; |
|||
29
1С-ница
06.02.13
✎
10:06
|
(27) это как?
|
|||
30
МихаилМ
06.02.13
✎
10:08
|
(0)
и не забывайте об ограничении вложенных case (Выбор) |
|||
31
1С-ница
06.02.13
✎
10:12
|
(30) напомните ограничение?
|
|||
32
МихаилМ
06.02.13
✎
10:31
|
||||
33
Бубр
06.02.13
✎
10:37
|
(0) Полнотекстовый поиск не подойдет ?
|
|||
34
mikecool
06.02.13
✎
10:38
|
(29) текстзапроса = текстзапроса + " какой то кусок "
|
|||
35
1С-ница
06.02.13
✎
10:40
|
(34) я примерно так и делаю в (28)
Только с итераторами цикла просчиталась |
|||
36
1С-ница
06.02.13
✎
10:56
|
(33) Полнотекстовым поиском не пользовалась
|
|||
37
1С-ница
06.02.13
✎
12:03
|
Для й = 1 По МинДлинаАртикула Цикл
Текст = Текст+"ВЫБОР Когда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, |ПоложительныеОстатки.ДлинаАртикулаПоложит -"+й+") ПОДОБНО ПОДСТРОКА(ПоложительныеОстатки.НоменклатураАртикул, 1,ПоложительныеОстатки.ДлинаАртикулаПоложит -"+й+") |тогда ПОДСТРОКА(ОтрицательныеОстатки.НоменклатураАртикул, 1, ПоложительныеОстатки.ДлинаАртикулаПоложит -"+й+") ИНАЧЕ "; ТекстКонец = ТекстКонец + " Конец "; КонецЦикла; |
|||
38
1С-ница
06.02.13
✎
12:05
|
Если взять минимальную длину артикула = 4, то получается цикл с 1 по 4
При длине артикула 6 должен быть цикл с 1 по 2 Как найти длина артикула - минимальная длина артикула, если длина артикула получается в запросе? (ПоложительныеОстатки.ДлинаАртикулаПоложит) |
|||
39
1С-ница
06.02.13
✎
12:07
|
(33)
МенеджерПолнотекстовогоПоиска (FullTextSearchManager) Методы: ДатаАктуальности (UpdateDate) ИндексАктуален (IndexTrue) ОбновитьИндекс (UpdateIndex) ОбновлениеИндексаЗавершено (IndexUpdateComplete) ОчиститьИндекс (ClearIndex) ПолучитьРежимПолнотекстовогоПоиска (GetFullTextSearchMode) СоздатьСписок (CreateList) УстановитьРежимПолнотекстовогоПоиска (SetFullTextSearchMode) Описание: Менеджер полнотекстового поиска. С его помощью осуществляется обновление индексов и получается информация об актуальности индекса. Доступность: Сервер, толстый клиент, внешнее соединение. Чем Полнотекстовый поиск можешь помочь решению моей задачи? |
|||
40
1С-ница
06.02.13
✎
12:51
|
Ни у кого мыслей нету?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |