|
Сравнение подобно | ☑ | ||
---|---|---|---|---|
0
Альбатрос
05.05.12
✎
08:06
|
Доброго времени суток!
Задача: Из ексель формируется список артиклов номенклатуры. Нужен запрос, который сравнил бы все артиклы базы на не точное вхождение в этот список. То есть наш артикул: 300.01.1А должен соответствовать загружаемому 300.01.1Б или 300.01.2А из списка. Моя мысль: перебирать список, отрезать последние 2 символа и устанавливать условие типа ПОДОБНО ЭлементСписка%. Но так получается запрос в цикле. Как-нибудь более оптимизировано это можно решить? |
|||
1
Wobland
05.05.12
✎
08:08
|
подстрока() без цикла работает..
|
|||
2
Cube
05.05.12
✎
08:09
|
(0) В запросе, в условиях соединения таблиц можно тоже отрезать два символа и ПОДОБНО написать
|
|||
3
Альбатрос
05.05.12
✎
08:14
|
(1) Что за метод такой? не могу в СП найти...
(2) То есть запихнуть список во временную таблицу? |
|||
4
Wobland
05.05.12
✎
08:15
|
(3) про язык запросов смотри
|
|||
5
Альбатрос
05.05.12
✎
08:20
|
(4) Где найти? =)
|
|||
6
МихаилМ
05.05.12
✎
08:21
|
(5)
в СП нет есть в справке (помощи) конфигуратора. |
|||
7
Альбатрос
05.05.12
✎
08:29
|
Ага, нашел.
Ну так получается список все равно нужно во временную таблицу положить? |
|||
8
andrewks
05.05.12
✎
08:46
|
(7) да. это сложно?
|
|||
9
Irbis
05.05.12
✎
09:01
|
% (процент): последовательность, содержащая любое количество произвольных символов
_ (подчеркивание): один произвольный символ […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов. Источник: http://forum.erpsolutions.ru/showthread.php?t=516 |
|||
10
Альбатрос
05.05.12
✎
09:12
|
(8) Вроде нет, но я прочитал, что если вр. таблица создается на основе внешнего источника, то соединения использовать нельзя. Это так?
(9) Спасибо, я уже прочитал |
|||
11
andrewks
05.05.12
✎
09:28
|
вн.источник - это немного не то
|
|||
12
Альбатрос
05.05.12
✎
09:37
|
А как в запросе можно определить длину строки?
|
|||
13
Axel2009
05.05.12
✎
09:38
|
(0) всю таблицу эксель добавляешь в ТЗ, этот ТЗ помещаешь во временную таблицу и там уже запросами играешься
|
|||
14
andrewks
05.05.12
✎
09:38
|
(12) тебе зачем?
|
|||
15
Reset
05.05.12
✎
09:47
|
(9) Почему для для копипасты из справки как "источник" указан какой-то форум? :)
|
|||
16
Wobland
05.05.12
✎
09:51
|
(15) мож, 1Сцы справку по сусекам собирали ;)
|
|||
17
Альбатрос
05.05.12
✎
10:00
|
Вобщем, вот мое чудовище. Ессесно не работает. Ногами не бить!!!!
ВрТаблица = новый менеджерВременныхТаблиц; Запрос = Новый Запрос; запрос.МенеджерВременныхТаблиц = ВрТаблица; Запрос.Текст = " |ВЫБРАТЬ | Номенклатура.Ссылка КАК Ном, | Номенклатура.Артикул |ИЗ | Справочник.Номенклатура КАК Номенклатура |ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ | Источник.Артикул КАК ПолныйАртикулИсточника, | Источник.ОбрАртикул КАК ОбрАртикул | ПОМЕСТИТЬ ВременнаяТаблица | ИЗ &ВнешнийИсточник КАК Источник |ПО Номенклатура.Артикул ПОДОБНО ВременнаяТаблица.ОбрАртикул% | |"; Запрос.УстановитьПараметр("ВнешнийИсточник", СпАрт); Рез = Запрос.Выполнить().Выбрать(); Первая ошибка: {Форма.ФормаЗагрузки.Форма(82)}: Ошибка при вызове метода контекста (Выполнить) Рез = Запрос.Выполнить().Выбрать(); по причине: {(10, 6)}: Предложение ПОМЕСТИТЬ может располагаться только в основном запросе <<?>>ПОМЕСТИТЬ ВременнаяТаблица Это значит, что вр. таблицу нужно первой создавать? |
|||
18
ZanderZ
05.05.12
✎
10:01
|
(17) да. В пакете делай - вначале временную, а потом соединение
|
|||
19
Wobland
05.05.12
✎
10:03
|
могу наврать
Запрос.Текст="ВЫБРАТЬ ... ПОМЕСТИТЬ ВрТаблица"; Запрос.Выполнить(); Запрос.Текст="ВЫБРАТЬ ... ИЗ ВрТаблица"; Запрос.Выполнить().Выбрать(); |
|||
20
Axel2009
05.05.12
✎
10:04
|
ВременнаяТаблица.ОбрАртикул + ""%""
|
|||
21
Альбатрос
05.05.12
✎
10:23
|
Исправил вот так:
" |ВЫБРАТЬ | Источник.Артикул КАК ПолныйАртикулИсточника, | Источник.ОбрАртикул КАК ОбрАртикул | ПОМЕСТИТЬ ВременнаяТаблица | ИЗ &ВнешнийИсточник КАК Источник; | |ВЫБРАТЬ | Номенклатура.Ссылка КАК Ном, | Номенклатура.Артикул |ИЗ | Справочник.Номенклатура КАК Номенклатура |ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица |ПО Номенклатура.Артикул ПОДОБНО ВременнаяТаблица.ОбрАртикул+""%"" | |"; Ошибка: ормаЗагрузки.Форма(86)}: Ошибка при вызове метода контекста (Выполнить) Рез = Запрос.Выполнить().Выбрать(); по причине: {(14, 33)}: Неверные параметры "+" ПО Номенклатура.Артикул ПОДОБНО <<?>>ВременнаяТаблица.ОбрАртикул+"%" |
|||
22
Альбатрос
05.05.12
✎
10:40
|
(21) Понял, надо было типизировать колонки ТЗ.
У меня 40тыс позиций номенклатуры и 20 тыс загружаемых артиклов для сравнения. Запрос висит уже минут 10. Это нормально? =) |
|||
23
Альбатрос
05.05.12
✎
10:55
|
Всем огромное спасибо!!! Вроде работает!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |