Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Запрос и пустые строки (http://forums.kuban.ru/f1040/zapros_i_pustye_stroki-2454492.html)

mykuban 05.04.2012 12:34

Запрос и пустые строки
 
Делаю запрос по справочнику. по полю ПолноеНаименование.

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

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

Почему?

Sadovnikov 05.04.2012 12:39

(1) Выполни:
Найти("апро", "")
И помедитируй над результатом.

Uho 05.04.2012 12:50

(1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее.

mykuban 05.04.2012 12:52

так а почему найти, то. у меня запрос тут

Sadovnikov 05.04.2012 12:54

(4) Потому что гладиолус:
(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))))

mykuban 05.04.2012 13:04

[quote=Uho;24404311] (1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее. [/quote]

ну да, медленно как то работает.

mykuban 05.04.2012 13:05

[quote=Sadovnikov;24404407] (4) Потому что гладиолус: (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) [/quote]

ой непонятно

Sadovnikov 05.04.2012 13:06

(7) Кто запрос писал?

mykuban 05.04.2012 13:08

[quote=Sadovnikov;24404712] (7) Кто запрос писал? [/quote]

ой не я, тетенька одна

Sadovnikov 05.04.2012 13:09

(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим)

mykuban 05.04.2012 13:10

[quote=Sadovnikov;24404712] (7) Кто запрос писал? [/quote]

но запрос вроде нормальный, вроде должен нормально работать, а он кучу мусора кроме нужной информации выдает.

я с запросами в 1с вообще первый раз сталкиваюсь, не могу понять почему так получается.

Sadovnikov 05.04.2012 13:16

Блин, чёт туплю я опять... Не глянул, что в чем ищется...
СтрНаим - откуда берется?

mykuban 05.04.2012 13:17

[quote=Sadovnikov;24404795] (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим) [/quote]

сделать без запроса, просто поиск?

Sadovnikov 05.04.2012 13:18

(13) Вопросы будем читать?

mykuban 05.04.2012 13:19

[quote=Sadovnikov;24404972] Блин, чёт туплю я опять... Не глянул, что в чем ищется... СтрНаим - откуда берется? [/quote]

вводится в поле на форме. с клавиатуры. и вызывается функция в которой запросом ищется и выводится.

Buzz 05.04.2012 13:31

Вместо вот этого
|Условие ((НРег(СокрЛП(ПолнНаименование))=НРег(СокрЛП(СтрНа им))) или
| (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование))));
можно через функцию нарисовать.
|Условие НужноеНаименование(ПолнНаименование) = 1;

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

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

Конечно SQL запрос ускорит, если есть такая возможность.

Sadovnikov 05.04.2012 13:38

Не, нифига. Все правильно я писал.

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

mykuban 05.04.2012 13:41

все понятно.

Sadovnikov 05.04.2012 13:46

(18) Выкинь тот бред, что в (1) и напиши:

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

И больше не зовите ту тетеньку...

101 05.04.2012 13:50

жжоте :))

Sadovnikov 05.04.2012 13:55

+(19) Пара поправок.
1. После "Без итогов" - точка с запятой.
2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим)
3. Предварительно СтрНаим = ВРег(СтрНаим)

mykuban 05.04.2012 14:07

[quote=Sadovnikov;24405879] +(19) Пара поправок. 1. После "Без итогов" - точка с запятой. 2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим) 3. Предварительно СтрНаим = ВРег(СтрНаим) [/quote]

хм, теперь вообще ничего не находит

Sadovnikov 05.04.2012 14:10

(22) Больше кода. У меня все находит.

mykuban 05.04.2012 14:11

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

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

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

ИспользоватьСписокЭлементов(СпЗнВл);

Sadovnikov 05.04.2012 14:44

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

Должно работать.

MaxFactor 05.04.2012 14:48

(24)
Пока Запрос.Группировка(1) = 1 Цикл
поменять на
Пока Запрос.Группировка() = 1 Цикл

user1C 05.04.2012 14:49

(24)

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

Синтаксис:

Без итогов;

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

Without Totals;

Описание:

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

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

Пример:

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

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

...

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

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

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

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

Возврат;

КонецЕсли;



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

...

КонецЦикла;

Замечание. Если в тексте запроса используется группировка по многоуровневому справочнику и не указано "Без Групп", то итоги по группам справочника будут накапливаться. Другими словами, если в запросе не нужны итоги по группам справочника, то в тексте запроса кроме использования оператора "Без Итогов" дополнительно следует в операторах "Группировка ..." использовать ключевое слово "Без Групп".
(с)жкк

Sadovnikov 05.04.2012 15:04

(26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить().

mykuban 05.04.2012 15:10

Ищет но не все теперь находит. Допустим ищу СОЮЗ, а он находит только допустим Аквасоюз, Промсоюз.

а ооо "союз" не находит

mykuban 05.04.2012 15:12

а! вообще ООО не ищет.

mykuban 05.04.2012 15:19

[quote=Sadovnikov;24406973] _стрНаим = ВРег(СтрНаим); [/quote]

_стрНаим = ВРег(СокрЛП(СтрНаим));

вот в чем дело то было. теперь все ОК. Всем большой спасибо!

mykuban 05.04.2012 15:21

В разве нельзя это - _стрНаим = ВРег(СокрЛП(СтрНаим));
прямо в запрос написать?

mykuban 05.04.2012 15:22

[quote=Sadovnikov;24407520] (26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить(). [/quote]

не, группировка как раз подходит.

Sadovnikov 05.04.2012 15:29

(32) Ну почему нельзя? Можно, если ставим перед собой цел - увеличение времени работы запроса...
(33) Подходит. Только кода больше и работает долльше.


Текущее время: 09:04. Часовой пояс GMT +3.