![]() |
Запрос и пустые строки Делаю запрос по справочнику. по полю ПолноеНаименование. "//**{ЗАПРОС(Сформировать) |Предприятия = Справочник.Предприятия.ТекущийЭлемент; |ПолнНаименование = Справочник.Предприятия.ПолнНаименование; |Группировка Предприятия; |Условие ((НРег(СокрЛП(ПолнНаименование))=НРег(СокрЛП(СтрНаим))) или | (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))); |"//****ЗАПРОС ; он находит нужные данные, но кроме этого возвращает еще строки в которых поле ПолноеНаименование - пустое. Почему? |
(1) Выполни: Найти("апро", "") И помедитируй над результатом. |
(1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее. |
так а почему найти, то. у меня запрос тут |
(4) Потому что гладиолус: (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) |
[quote=Uho;24404311] (1) вообще то строковые функции заметно тормозят выполнение запроса, в данном случае перебор с допиливанием, имхо, будет быстрее. [/quote] ну да, медленно как то работает. |
[quote=Sadovnikov;24404407] (4) Потому что гладиолус: (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) [/quote] ой непонятно |
(7) Кто запрос писал? |
[quote=Sadovnikov;24404712] (7) Кто запрос писал? [/quote] ой не я, тетенька одна |
(НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим) |
[quote=Sadovnikov;24404712] (7) Кто запрос писал? [/quote] но запрос вроде нормальный, вроде должен нормально работать, а он кучу мусора кроме нужной информации выдает. я с запросами в 1с вообще первый раз сталкиваюсь, не могу понять почему так получается. |
Блин, чёт туплю я опять... Не глянул, что в чем ищется... СтрНаим - откуда берется? |
[quote=Sadovnikov;24404795] (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))) = Найти(ПолнНаименование, СтрНаим) [/quote] сделать без запроса, просто поиск? |
(13) Вопросы будем читать? |
[quote=Sadovnikov;24404972] Блин, чёт туплю я опять... Не глянул, что в чем ищется... СтрНаим - откуда берется? [/quote] вводится в поле на форме. с клавиатуры. и вызывается функция в которой запросом ищется и выводится. |
Вместо вот этого |Условие ((НРег(СокрЛП(ПолнНаименование))=НРег(СокрЛП(СтрНа им))) или | (НРег(СокрЛП(СтрНаим)) В НРег(СокрЛП (ПолнНаименование)))); можно через функцию нарисовать. |Условие НужноеНаименование(ПолнНаименование) = 1; Сама функция: Функция НужноеНаименование(Наименование) Если Нрег(СокрЛП(СтрНаим)) = Нрег(СокрЛП(Наименование)) Тогда Возврат 1; ИначеЕсли Найти(Нрег(СокрЛП(СтрНаим)),Нрег(СокрЛП(Наименование)) > 0 Тогда Возврат 1; Иначе Возврат 0 КонецЕсли; КонецФункции Заодно проверишь откуда пустые наименования лезут. Конечно SQL запрос ускорит, если есть такая возможность. |
Не, нифига. Все правильно я писал. СП: "Синтаксис: В Англоязычный синоним: In Описание: Оператор языка запросов ''Условие (А в Б);'' говорит о том, что условие истинно, когда значение А является подмножеством значения Б. Следует особо отметить, что если значение Б пустое (объект не выбран), то условие является истинным," |
все понятно. |
(18) Выкинь тот бред, что в (1) и напиши: |Без Итогов |Предприятия = Справочник.Предприятия.ТекущийЭлемент; |ПолнНаименование = Справочник.Предприятия.ПолнНаименование; |Группировка Предприятия Без Групп; |Условие (Найти(ПолнНаименование, СтрНаим) > 0); И больше не зовите ту тетеньку... |
жжоте :)) |
+(19) Пара поправок. 1. После "Без итогов" - точка с запятой. 2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим) 3. Предварительно СтрНаим = ВРег(СтрНаим) |
[quote=Sadovnikov;24405879] +(19) Пара поправок. 1. После "Без итогов" - точка с запятой. 2. Вместо Найти(ПолнНаименование, СтрНаим) должно быть Найти(ВРег(ПолнНаименование), СтрНаим) 3. Предварительно СтрНаим = ВРег(СтрНаим) [/quote] хм, теперь вообще ничего не находит |
(22) Больше кода. У меня все находит. |
Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Без Итогов; |Предприятия = Справочник.Предприятия.ТекущийЭлемент; |ПолнНаименование = Справочник.Предприятия.ПолнНаименование; |Группировка Предприятия; |Условие (Найти(ВРег(ПолнНаименование), ВРег(СтрНаим)) > 0); |"//****ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка(1) = 1 Цикл СпЗнВл.ДобавитьЗначение(Запрос.Предприятия); КонецЦикла; ИспользоватьСписокЭлементов(СпЗнВл); |
_стрНаим = ВРег(СтрНаим); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//**{ЗАПРОС(Сформировать) |Без Итогов; |Предприятия = Справочник.Предприятия.ТекущийЭлемент; |ПолнНаименование = Справочник.Предприятия.ПолнНаименование; |Группировка Предприятия; |Условие (Найти(ВРег(ПолнНаименование), _стрНаим) > 0); |"//****ЗАПРОС ; Должно работать. |
(24) Пока Запрос.Группировка(1) = 1 Цикл поменять на Пока Запрос.Группировка() = 1 Цикл |
(24) Без итогов Не накапливать итоги по группировкам. Синтаксис: Без итогов; Англоязычный синоним: Without Totals; Описание: Цель данного оператора — увеличение скорости выполнения запроса, при условии, что итоговые записи при использовании запроса не нужны. Данный оператор языка запросов, дает возможность не накапливать итоги по группировкам. Использовать данный оператор в тексте запроса имеет смысл, когда запрос строится не для формирования сложного отчета, а например, для простой выборки значений из информационной базы для последующей их обработки. В случае применения данного оператора в тексте запроса, при обходе результатов запроса применяется только один цикл обхода, используя метод объ*екта «Запрос» Группировка() [b]без параметра[/b]. Пример: Запрос = СоздатьОбъект("Запрос"); Текст3апроса = " ... |Группировка Товар; |Группировка Склад; |Без Итогов; "; Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка() = 1 Цикл ... КонецЦикла; Замечание. Если в тексте запроса используется группировка по многоуровневому справочнику и не указано "Без Групп", то итоги по группам справочника будут накапливаться. Другими словами, если в запросе не нужны итоги по группам справочника, то в тексте запроса кроме использования оператора "Без Итогов" дополнительно следует в операторах "Группировка ..." использовать ключевое слово "Без Групп". (с)жкк |
(26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить(). |
Ищет но не все теперь находит. Допустим ищу СОЮЗ, а он находит только допустим Аквасоюз, Промсоюз. а ооо "союз" не находит |
а! вообще ООО не ищет. |
[quote=Sadovnikov;24406973] _стрНаим = ВРег(СтрНаим); [/quote] _стрНаим = ВРег(СокрЛП(СтрНаим)); вот в чем дело то было. теперь все ОК. Всем большой спасибо! |
В разве нельзя это - _стрНаим = ВРег(СокрЛП(СтрНаим)); прямо в запрос написать? |
[quote=Sadovnikov;24407520] (26) Вообще не надо там Группировка(). Есть прекрасный метод Выгрузить(). [/quote] не, группировка как раз подходит. |
(32) Ну почему нельзя? Можно, если ставим перед собой цел - увеличение времени работы запроса... (33) Подходит. Только кода больше и работает долльше. |
Текущее время: 09:04. Часовой пояс GMT +3. |