|   |   | 
| 
 | Обработка строк в запросе | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Ни у кого мыслей нету?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |