Имя: Пароль:
1C
1С v8
Сравнение подобно
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
Всем огромное спасибо!!! Вроде работает!!!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.