К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Запрос и пустые строки

Гость
0 - 05.04.2012 - 12:34
Делаю запрос по справочнику. по полю ПолноеНаименование.

"//**{ЗАПРОС(Сформировать)
|Предприятия = Справочник.Предприятия.ТекущийЭлемент;
|ПолнНаименование = Справочник.Предприятия.ПолнНаименование;
|Группировка Предприятия;
|Условие ((НРег(СокрЛП(ПолнНаименование))=НРег(СокрЛП(СтрНа им))) или
| (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))));
|"//****ЗАПРОС
;

он находит нужные данные, но кроме этого возвращает еще строки в которых поле ПолноеНаименование - пустое.

Почему?



Гость
1 - 05.04.2012 - 12:39
(1) Выполни:
Найти("апро", "")
И помедитируй над результатом.
Uho
2 - 05.04.2012 - 12:50
(1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее.
Гость
3 - 05.04.2012 - 12:52
так а почему найти, то. у меня запрос тут
Гость
4 - 05.04.2012 - 12:54
(4) Потому что гладиолус:
(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))))
Гость
5 - 05.04.2012 - 13:04
Цитата:
Сообщение от Uho Посмотреть сообщение
(1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее.
ну да, медленно как то работает.
Гость
6 - 05.04.2012 - 13:05
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
(4) Потому что гладиолус: (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))))
ой непонятно
Гость
7 - 05.04.2012 - 13:06
(7) Кто запрос писал?
Гость
8 - 05.04.2012 - 13:08
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
(7) Кто запрос писал?
ой не я, тетенька одна
Гость
9 - 05.04.2012 - 13:09
(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим)
Гость
10 - 05.04.2012 - 13:10
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
(7) Кто запрос писал?
но запрос вроде нормальный, вроде должен нормально работать, а он кучу мусора кроме нужной информации выдает.

я с запросами в 1с вообще первый раз сталкиваюсь, не могу понять почему так получается.
Гость
11 - 05.04.2012 - 13:16
Блин, чёт туплю я опять... Не глянул, что в чем ищется...
СтрНаим - откуда берется?
Гость
12 - 05.04.2012 - 13:17
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим)
сделать без запроса, просто поиск?
Гость
13 - 05.04.2012 - 13:18
(13) Вопросы будем читать?
Гость
14 - 05.04.2012 - 13:19
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
Блин, чёт туплю я опять... Не глянул, что в чем ищется... СтрНаим - откуда берется?
вводится в поле на форме. с клавиатуры. и вызывается функция в которой запросом ищется и выводится.
Гость
15 - 05.04.2012 - 13:31
Вместо вот этого
|Условие ((НРег(СокрЛП(ПолнНаименование))=НРег(СокрЛП(СтрНа им))) или
| (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))));
можно через функцию нарисовать.
|Условие НужноеНаименование(ПолнНаименование) = 1;

Сама функция:
Функция НужноеНаименование(Наименование)
Если Нрег(СокрЛП(СтрНаим)) = Нрег(СокрЛП(Наименование)) Тогда
Возврат 1;
ИначеЕсли Найти(Нрег(СокрЛП(СтрНаим)),Нрег(СокрЛП(Наименован ие)) > 0 Тогда
Возврат 1;
Иначе
Возврат 0
КонецЕсли;

КонецФункции
Заодно проверишь откуда пустые наименования лезут.

Конечно SQL запрос ускорит, если есть такая возможность.
Гость
16 - 05.04.2012 - 13:38
Не, нифига. Все правильно я писал.

СП:
"Синтаксис:
В
Англоязычный синоним:
In
Описание:
Оператор языка запросов ''Условие (А в Б);'' говорит о том, что условие истинно, когда значение А является подмножеством значения Б. Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным,"
Гость
17 - 05.04.2012 - 13:41
все понятно.
Гость
18 - 05.04.2012 - 13:46
(18) Выкинь тот бред, что в (1) и напиши:

|Без Итогов
|Предприятия = Справочник.Предприятия.ТекущийЭлемент;
|ПолнНаименование = Справочник.Предприятия.ПолнНаименование;
|Группировка Предприятия Без Групп;
|Условие (Найти(ПолнНаименование, СтрНаим) > 0);

И больше не зовите ту тетеньку...
Гость
19 - 05.04.2012 - 13:50
жжоте :))
Гость
20 - 05.04.2012 - 13:55
+(19) Пара поправок.
1. После "Без итогов" - точка с запятой.
2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим)
3. Предварительно СтрНаим = ВРег(СтрНаим)
Гость
21 - 05.04.2012 - 14:07
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
+(19) Пара поправок. 1. После "Без итогов" - точка с запятой. 2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим) 3. Предварительно СтрНаим = ВРег(СтрНаим)
хм, теперь вообще ничего не находит
Гость
22 - 05.04.2012 - 14:10
(22) Больше кода. У меня все находит.
Гость
23 - 05.04.2012 - 14:11
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Без Итогов;
|Предприятия = Справочник.Предприятия.ТекущийЭлемент;
|ПолнНаименование = Справочник.Предприятия.ПолнНаименование;
|Группировка Предприятия;
|Условие (Найти(ВРег(ПолнНаименование), ВРег(СтрНаим)) > 0);
|"//****ЗАПРОС
;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл
СпЗнВл.ДобавитьЗначение(Запрос.Предприятия);
КонецЦикла;

ИспользоватьСписокЭлементов(СпЗнВл);
Гость
24 - 05.04.2012 - 14:44
_стрНаим = ВРег(СтрНаим);
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Без Итогов;
|Предприятия = Справочник.Предприятия.ТекущийЭлемент;
|ПолнНаименование = Справочник.Предприятия.ПолнНаименование;
|Группировка Предприятия;
|Условие (Найти(ВРег(ПолнНаименование), _стрНаим) > 0);
|"//****ЗАПРОС
;

Должно работать.
Гость
25 - 05.04.2012 - 14:48
(24)
Пока Запрос.Группировка(1) = 1 Цикл
поменять на
Пока Запрос.Группировка() = 1 Цикл
26 - 05.04.2012 - 14:49
(24)

Без итогов
Не накапливать итоги по группировкам.

Синтаксис:

Без итогов;

Англоязычный синоним:

Without Totals;

Описание:

Цель данного оператора — увеличение скорости выполнения запроса, при условии, что итоговые записи при использовании запроса не нужны. Данный оператор языка запросов, дает возможность не накапливать итоги по группировкам. Использовать данный оператор в тексте запроса имеет смысл, когда запрос строится не для формирования сложного отчета, а например, для простой выборки значений из информационной базы для последующей их обработки.

В случае применения данного оператора в тексте запроса, при обходе результатов запроса применяется только один цикл обхода, используя метод объ*екта «Запрос» Группировка() без параметра.

Пример:

Запрос = СоздатьОбъект("Запрос");

Текст3апроса = "

...

|Группировка Товар;

|Группировка Склад;

|Без Итогов; ";

Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда

Возврат;

КонецЕсли;



Пока Запрос.Группировка() = 1 Цикл

...

КонецЦикла;

Замечание. Если в тексте запроса используется группировка по многоуровневому справочнику и не указано "Без Групп", то итоги по группам справочника будут накапливаться. Другими словами, если в запросе не нужны итоги по группам справочника, то в тексте запроса кроме использования оператора "Без Итогов" дополнительно следует в операторах "Группировка ..." использовать ключевое слово "Без Групп".
(с)жкк
Гость
27 - 05.04.2012 - 15:04
(26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить().
Гость
28 - 05.04.2012 - 15:10
Ищет но не все теперь находит. Допустим ищу СОЮЗ, а он находит только допустим Аквасоюз, Промсоюз.

а ооо "союз" не находит
Гость
29 - 05.04.2012 - 15:12
а! вообще ООО не ищет.
Гость
30 - 05.04.2012 - 15:19
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
_стрНаим = ВРег(СтрНаим);
_стрНаим = ВРег(СокрЛП(СтрНаим));

вот в чем дело то было. теперь все ОК. Всем большой спасибо!
Гость
31 - 05.04.2012 - 15:21
В разве нельзя это - _стрНаим = ВРег(СокрЛП(СтрНаим));
прямо в запрос написать?
Гость
32 - 05.04.2012 - 15:22
Цитата:
Сообщение от Sadovnikov Посмотреть сообщение
(26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить().
не, группировка как раз подходит.
Гость
33 - 05.04.2012 - 15:29
(32) Ну почему нельзя? Можно, если ставим перед собой цел - увеличение времени работы запроса...
(33) Подходит. Только кода больше и работает долльше.


К списку вопросов






Copyright ©, Все права защищены