Имя: Пароль:
1C
1С v8
Запрос. Можно как-нибудь по приличнее нарисовать?
0 Галахад
 
гуру
24.10.12
07:49
Нарисовал запрос. Но чего-то он мне не очень нравиться.

Задача: поиск номенклатуры, которая одновременно содержит подстроки "Наименование1" и "Наименование2"

ВЫБРАТЬ
   Номенклатура1.Ссылка КАК Ссылка,
   1 КАК К1,
   0 КАК К2
ПОМЕСТИТЬ тз
ИЗ
   Справочник.Номенклатура КАК Номенклатура1
ГДЕ
   Номенклатура1.Наименование ПОДОБНО &Наименование1
   И (НЕ Номенклатура1.ЭтоГруппа)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   Номенклатура2.Ссылка,
   0,
   1
ИЗ
   Справочник.Номенклатура КАК Номенклатура2
ГДЕ
   Номенклатура2.Наименование ПОДОБНО &Наименование2
   И (НЕ Номенклатура2.ЭтоГруппа)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   тз.Ссылка КАК Ссылка,
   СУММА(тз.К1 + тз.К2) КАК К
ИЗ
   тз КАК тз

СГРУППИРОВАТЬ ПО
   тз.Ссылка

УПОРЯДОЧИТЬ ПО
   К УБЫВ
1 Wobland
 
24.10.12
07:52
а подобно одному или подобно другому в одном месте не подходит?
2 Wobland
 
24.10.12
07:52
(1) И
3 Рэйв
 
24.10.12
07:52
ВЫБРАТЬ
   Номенклатура.Ссылка,

ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Наименование ПОДОБНО &Наименование1
   И     Номенклатура.Наименование ПОДОБНО &Наименование2
4 Галахад
 
гуру
24.10.12
07:55
Не, ну так не интересно.
Это же пример, а на самом деле будет больше "НоменклатураN".

Если вхождений будет N - M эти номенклатуры тоже стоит показать.
5 Рэйв
 
24.10.12
07:56
дальше продолжай
И...

сколько надо
6 Wobland
 
24.10.12
07:57
(4) а тебе больше нравится временные таблицы плодить?
7 Wobland
 
24.10.12
07:58
я никому не скажу, что такое полнотекстовый поиск, пусть меня даже пытают
8 Галахад
 
гуру
24.10.12
07:59
(5) О, я условие криво написал.

"Задача: поиск номенклатуры, которая одновременно содержит подстроки "Наименование1" и "Наименование2" "

Задача: поиск номенклатуры, которая содержит одну из под строк "Наименование1" и "Наименование2" и вывести в таблицу по максимальному количеству вхождений"
9 Нууф-Нууф
 
24.10.12
08:00
бугага. на работу устраиваешься чтоль?
10 Wobland
 
24.10.12
08:01
кстати, И (НЕ Номенклатура2.ЭтоГруппа) - это зачем?
11 Галахад
 
гуру
24.10.12
08:01
(7) О, точно. Зенкс.

(9) Откуда ассоциация?
12 shuhard
 
24.10.12
08:02
(8) засунь строки поиска во ВТ
свяжи с номенклатурой по подобно
наложи Имеющие
13 Галахад
 
гуру
24.10.12
08:05
(12) Отличная идея. Зенкс.

Попробую .
14 Галахад
 
гуру
24.10.12
09:30
Похоже идея с полнотекстовым поиском не очень хороша.
Нажал кнопку обновить индекс и процесс идет уже полтора часа...
15 Wobland
 
24.10.12
09:31
(14) это он тебе его создаёт, похоже
16 Галахад
 
гуру
24.10.12
09:42
(15) Обновляет быстрее?
17 Wobland
 
24.10.12
09:43
(16) если не делать раз в год, конечно
18 Галахад
 
гуру
24.10.12
09:44
Не могу понять почему первый запрос работает, а второй нет.

ВЫБРАТЬ
   "%тест%" КАК Наименование
ПОМЕСТИТЬ тз
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Номенклатура.Ссылка,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) КАК Кол
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз
       ПО (Номенклатура.Наименование ПОДОБНО тз.Наименование)

СГРУППИРОВАТЬ ПО
   Номенклатура.Ссылка

ИМЕЮЩИЕ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) > 0


ВЫБРАТЬ
   Таб.Наименование КАК Наименование
ПОМЕСТИТЬ тз
ИЗ
   &Таб КАК Таб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Номенклатура.Ссылка,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) КАК Кол
ИЗ
   Справочник.Номенклатура КАК Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз
       ПО (Номенклатура.Наименование ПОДОБНО тз.Наименование)

СГРУППИРОВАТЬ ПО
   Номенклатура.Ссылка

ИМЕЮЩИЕ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) > 0
19 Галахад
 
гуру
24.10.12
09:47
Они же идентичны. Только в первом таблица заполняется в запросе, а во втором во вне.
20 Галахад
 
гуру
24.10.12
09:48
Текст ошибки.

Ошибка при вызове метода контекста (Выполнить): {(21, 23)}: Неверные параметры "КОЛИЧЕСТВО"
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ <<?>>тз.Наименование) > 0
   Результат = Запрос.Выполнить();    
по причине:
{(21, 23)}: Неверные параметры "КОЛИЧЕСТВО"
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ <<?>>тз.Наименование) > 0
21 Wobland
 
24.10.12
09:49
(20) &таб типизирована?
22 Галахад
 
гуру
24.10.12
09:53
(21) Полный код:

ТЗ=Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));

Стр=ТЗ.Добавить();
Стр.Наименование="%тест%";

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Таб.Наименование КАК Наименование
|ПОМЕСТИТЬ тз
|ИЗ
|    &Таб КАК Таб
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Номенклатура.Ссылка,
|    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) КАК Кол
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз
|        ПО (Номенклатура.Наименование ПОДОБНО тз.Наименование)
|
|СГРУППИРОВАТЬ ПО
|    Номенклатура.Ссылка
|
|ИМЕЮЩИЕ
|    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) > 0";


Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Результат = Запрос.Выполнить();    

ПострПечать = Новый ПостроительОтчета;
ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат.Выгрузить());
ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);
ПострПечать.Выполнить();
ПострПечать.Вывести();
23 Ёпрст
 
24.10.12
10:05
(22) группировать надо по наименованию, а не по ссылке.
24 Ёпрст
 
24.10.12
10:06
ну и левое соединение там не в п..у.
25 Ёпрст
 
24.10.12
10:06
т.е не нужно
26 Галахад
 
гуру
24.10.12
10:12
(23) Не понял. Можно пример?
27 Wobland
 
24.10.12
10:13
(26) СГРУППИРОВАТЬ ПО
|    Номенклатура.Наименование
28 Галахад
 
гуру
24.10.12
10:17
(27) Так? Ошибка та же.

ТЗ=Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));

Стр=ТЗ.Добавить();
Стр.Наименование="%тест%";

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Таб.Наименование КАК Наименование
|ПОМЕСТИТЬ тз
|ИЗ
|    &Таб КАК Таб
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Номенклатура.Наименование,
|    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) КАК Кол
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз
|        ПО (Номенклатура.Наименование ПОДОБНО тз.Наименование)
|
|СГРУППИРОВАТЬ ПО
|    Номенклатура.Наименование
|
|ИМЕЮЩИЕ
|    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) > 0";


Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Результат = Запрос.Выполнить();    

ПострПечать = Новый ПостроительОтчета;
ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат.Выгрузить());
ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);
ПострПечать.Выполнить();
ПострПечать.Вывести();
29 sidalexsandr
 
24.10.12
10:24
(28) Странно написанно, разве запрос может просмотреть ТаблицуЗначений?

Помойму надо убрать из запроса КОЛИЧЕСТВО(РАЗЛИЧНЫЕ тз.Наименование) > 0";


Вот тебе из справки в помощь : ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>]  

 
      <Список полей выборки>  

   [ИЗ <Список источников>]  

   [ГДЕ <Условие отбора>]  

   [СГРУППИРОВАТЬ ПО <Поля группировки>]  

   [ИМЕЮЩИЕ <Условие отбора>]
30 sidalexsandr
 
24.10.12
10:24
ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>]  
 
      <Список полей выборки>  

   [ИЗ <Список источников>]  

   [ГДЕ <Условие отбора>]  

   [СГРУППИРОВАТЬ ПО <Поля группировки>]  

   [ИМЕЮЩИЕ <Условие отбора>]
31 Wobland
 
24.10.12
10:26
странно это всё как-то.. вот у меня работает:

ВЫБРАТЬ
   "йо" как нечто
ПОМЕСТИТЬ ТЗ
;
выбрать
   Количество(различные ТЗ.Нечто) из ТЗ
32 sidalexsandr
 
24.10.12
10:26
(28) Количество как ты видиш в справке применяестя для после слова выбрать до из.
33 Галахад
 
гуру
24.10.12
10:28
(32) Не. Ты не понял.
34 Wobland
 
24.10.12
10:30
(32) всё у него правильно написано вроде бы. но у меня нет ТЗ, я её заменяю первым запросом, и работает. а у автора есть ТЗ и не работает
35 Галахад
 
гуру
24.10.12
10:40
(34) Как это нет тз? А код в (28)? Бери и вставляй! :-)


P.S. Вообщем обновление индекса закончилось.
И работа с полнотекстовым поиском мне понравилась.

Тема вроде бы исчерпана, но почему не работает (28) интересно.
36 RomanYS
 
24.10.12
10:41
попробуй ограничить длину строки в типе
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));

В запросах куча ограничений на длинные строки, может проблема в этом.
37 Wobland
 
24.10.12
10:43
(35) я в консоли играюсь
38 sidalexsandr
 
24.10.12
10:44
(37) Успехов в игре.
39 Галахад
 
гуру
24.10.12
10:49
(36) Бинго!


Всем спасибо. Вопрос закрыт.