Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Остатки по регистру (число прочтений - 5151 )
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #15 - 19. Декабря 2019 :: 13:35
Печать  
Djelf писал(а) 13. Декабря 2019 :: 10:41:
ObmanOZ писал(а) 13. Декабря 2019 :: 10:38:
Ссылка на обработку https://yadi.sk/d/IBn76XdlCZr0sQ


Так низззяяяяя Подмигивание
Перем ВыбСклад; //:Справочник.Склады

В результате этого ВыбСклад = ПустоеЗначение


Доброго дня) А не подскажите как дополнительно сделать отбор по наименованию?
В смысле что сам текст отбора будет примерно таким
UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска)
Как в запрос впихнуть $Номенклатура.ПолнНаименование? Надо как то хитро##по ведь через Объединить? )
  
Наверх
 
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Остатки по регистру
Ответ #16 - 19. Декабря 2019 :: 13:39
Печать  
надо джойнить таблицу справочник.номенклатура
  
Наверх
 
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #17 - 19. Декабря 2019 :: 13:45
Печать  
Arbuz писал(а) 19. Декабря 2019 :: 13:39:
надо джойнить таблицу справочник.номенклатура

|SELECT
|     $РегСН.Номенклатура AS [Товар $Справочник.Номенклатура],
|     $РегСН.Склад AS [Склад $Справочник.Склады],
|     $РегСН.Количество  AS КоличествоОстаток,
|     $Номенклатура.ПолнНаименование AS ПолнНаименование
|FROM $РегистрИтоги.ОстаткиТМЦ as РегСН
|FULL OUTER JOIN $Справочник.Номенклатура AS Номенклатура ON $РегСН.Номенклатура = Номенклатура.ID
|  WHERE
|     (period = :ВыбДата~~)
|     AND ($РегСН.Фирма=:ВыбФирмы)
|     AND ($РегСН.Склад=:ВыбСклад)
|     UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска)

Вот так не работает )
  
Наверх
 
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Остатки по регистру
Ответ #18 - 19. Декабря 2019 :: 13:50
Печать  
Код (SQL)
Выбрать все
|SELECT
|     $РегСН.Номенклатура AS [Товар $Справочник.Номенклатура],
|     $РегСН.Склад AS [Склад $Справочник.Склады],
|     $РегСН.Количество  AS КоличествоОстаток,
|     $Номенклатура.ПолнНаименование AS ПолнНаименование
|FROM $РегистрИтоги.ОстаткиТМЦ as РегСН
|LEFT JOIN $Справочник.Номенклатура AS Номенклатура ON $РегСН.Номенклатура = Номенклатура.ID AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска)
|  WHERE
|     (period = :ВыбДата~~)
|     AND ($РегСН.Фирма=:ВыбФирмы)
|     AND ($РегСН.Склад=:ВыбСклад)
|
 



Добавлено: упс! это тоже неправильно - надо либо тогда INNER JOIN вместо LEFT либо условие из ON  - AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска) - перенести в блок WHERE, как и было, только там изначально было пропущено AND
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Остатки по регистру
Ответ #19 - 19. Декабря 2019 :: 15:51
Печать  
Arbuz писал(а) 19. Декабря 2019 :: 13:50:
Добавлено: упс! это тоже неправильно - надо либо тогда INNER JOIN вместо LEFT либо условие из ON  - AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска) - перенести в блок WHERE, как и было, только там изначально было пропущено AND


Да, так правильно. Либо так, либо сяк.

Но нужно учесть что :СтрокаПоиска видимо (с mssql проверить не могу) возможно должна быть ограничена с обоих сторон одинарной кавычкой и знаком %.
Для mssql есть ПодготовленныйЗапрос и установка некоторых параметров на ходу? Не в курсе, должно наверное быть...

У меня на 1sqlite вот так
Код (SQL)
Выбрать все
 LEFT JOIN ()
 ...
 WHERE
 CASE WHEN @Наименование='*' THEN 1 ELSE Т.Наименование LIKE @Наименование END
 



@Наименование='*' устанавливаем сразу при установки в ТП.

А в ТП в ПриБыстромПоиске
Поиск="%"+СтрЗаменить(СокрЛП(Данные)," ","%")+"%";

Шустро, и не нужно запоминать или вводить %, просто считаем что пробел это любые символы. Юзверям такое понять и запомнить значительно проще Подмигивание

Ну и при ESC сбрасываем @Наименование на '*'.

И ESC, блокируем в
  Процедура тпОстатки_ПриНажатииКлавиши(тп,ВиртКод, Данные,
  Клавиатура, ФСО)
     Если ВиртКод=27 Тогда // ESC
           ФСО=0;
           тп.ТекущаяКолонка.Параметр = "*";
           тп.ТекущаяКолонка.Заголовок="Товар";
           тп.ТекущаяКолонка.ШрифтЗаголовка=ШрифтТекста;
           тп.ПоставщикДанных.УстановитьПараметр("@Наименование","*");
           тп.ПоставщикДанных.Перечитать();
     Иначе

P.S. Микросекунды (а может и нет) на подготовку запроса могут быть важны.
  
Наверх
www  
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #20 - 24. Декабря 2019 :: 11:24
Печать  
Arbuz писал(а) 19. Декабря 2019 :: 13:50:
Код (SQL)
Выбрать все
|SELECT
|     $РегСН.Номенклатура AS [Товар $Справочник.Номенклатура],
|     $РегСН.Склад AS [Склад $Справочник.Склады],
|     $РегСН.Количество  AS КоличествоОстаток,
|     $Номенклатура.ПолнНаименование AS ПолнНаименование
|FROM $РегистрИтоги.ОстаткиТМЦ as РегСН
|LEFT JOIN $Справочник.Номенклатура AS Номенклатура ON $РегСН.Номенклатура = Номенклатура.ID AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска)
|  WHERE
|     (period = :ВыбДата~~)
|     AND ($РегСН.Фирма=:ВыбФирмы)
|     AND ($РегСН.Склад=:ВыбСклад)
|
 



Добавлено: упс! это тоже неправильно - надо либо тогда INNER JOIN вместо LEFT либо условие из ON  - AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска) - перенести в блок WHERE, как и было, только там изначально было пропущено AND


Снова занялся этим вопросом, не взлетело... вот мой текст
   |SELECT
   |     $РегСН.Номенклатура AS [Товар $Справочник.Номенклатура],
   |     $РегСН.Склад AS [Склад $Справочник.Склады],
   |     $РегСН.Количество  AS КоличествоОстаток,
   |     СпрНом.Descr as Наименование
   |FROM $РегистрИтоги.ОстаткиТМЦ as РегСН
   |LEFT JOIN $Справочник.Номенклатура AS СпрНом ON $РегСН.Номенклатура = СпрНом.ID
   |  WHERE
   |     (period = :ВыбДата~~)
   |     AND ($РегСН.Фирма=:ВыбФирмы)
   |     AND ($РегСН.Склад=:ВыбСклад)
   |     AND (UPPER(left(СпрНом.Descr as Наименование,254)) LIKE (:СтрокаПоиска))
   | ";

Получаю ошибку:
FAILED! ICommandText::Execute(): Function name is missing ).
  
Наверх
 
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #21 - 24. Декабря 2019 :: 11:26
Печать  
Строку поиска устанавливаю так:

На форме поле текст
_СтрокаПоиска="%"+СокрЛП(Врег(Текст))+"%";
рс.УстановитьТекстовыйПараметр("СтрокаПоиска", _СтрокаПоиска);
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Остатки по регистру
Ответ #22 - 24. Декабря 2019 :: 11:59
Печать  
ObmanOZ писал(а) 24. Декабря 2019 :: 11:24:
AND UPPER(left(СпрНом.Descr as Наименование,254)) LIKE (:СтрокаПоиска))

Получаю ошибку:
FAILED! ICommandText::Execute(): Function name is missing ).


LIKE со скобками это функция LIKE(), а ее нет! LIKE пишется без скобок.
  
Наверх
www  
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #23 - 24. Декабря 2019 :: 13:18
Печать  
Djelf писал(а) 24. Декабря 2019 :: 11:59:
ObmanOZ писал(а) 24. Декабря 2019 :: 11:24:
AND UPPER(left(СпрНом.Descr as Наименование,254)) LIKE (:СтрокаПоиска))

Получаю ошибку:
FAILED! ICommandText::Execute(): Function name is missing ).


LIKE со скобками это функция LIKE(), а ее нет! LIKE пишется без скобок.


Спасибо огромное, Вы были правы, вот так заработало:
|SELECT
   |     $РегСН.Номенклатура AS [Товар $Справочник.Номенклатура],
   |     $РегСН.Склад AS [Склад $Справочник.Склады],
   |     $РегСН.Количество  AS КоличествоОстаток,
   |     СпрНом.Descr as Наименование
   |FROM $РегистрИтоги.ОстаткиТМЦ as РегСН
   |LEFT JOIN $Справочник.Номенклатура AS СпрНом ON $РегСН.Номенклатура = СпрНом.ID
   |  WHERE
   |     (period = :ВыбДата~~)
   |     AND ($РегСН.Фирма=:ВыбФирмы)
   |     AND ($РегСН.Склад=:ВыбСклад)
   |     AND UPPER(СпрНом.Descr) LIKE 'СтрокаПоиска'
   | ";
Павда результат пока пустой, но с этим я разберусь)
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Остатки по регистру
Ответ #24 - 24. Декабря 2019 :: 15:47
Печать  
ObmanOZ писал(а) 24. Декабря 2019 :: 13:18:
   |     AND ($РегСН.Фирма=:ВыбФирмы)
   |     AND UPPER(СпрНом.Descr) LIKE 'СтрокаПоиска'
   | ";
Павда результат пока пустой, но с этим я разберусь)


Ну что же ты такой невнимательный? Подмигивание
1. Фирма=:ВыбФирмы
Уверен что реквизит формы именно ВыбФирмЫ? И это не список значений?
2. LIKE 'СтрокаПоиска'
Так ведь ':СтрокаПоиска' или пиши туда LIKE '"+СтрокаПоиска+"'
  
Наверх
www  
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #25 - 25. Декабря 2019 :: 09:10
Печать  
Djelf писал(а) 24. Декабря 2019 :: 15:47:
ObmanOZ писал(а) 24. Декабря 2019 :: 13:18:
   |     AND ($РегСН.Фирма=:ВыбФирмы)
   |     AND UPPER(СпрНом.Descr) LIKE 'СтрокаПоиска'
   | ";
Павда результат пока пустой, но с этим я разберусь)


Ну что же ты такой невнимательный? Подмигивание
1. Фирма=:ВыбФирмы
Уверен что реквизит формы именно ВыбФирмЫ? И это не список значений?
2. LIKE 'СтрокаПоиска'
Так ведь ':СтрокаПоиска' или пиши туда LIKE '"+СтрокаПоиска+"'


Ну я молод и тороплив)
Реквизиты проверил, все норм, запрос без условия  "AND UPPER(СпрНом.Descr) LIKE 'СтрокаПоиска'" - отрабатывает, показывает остатки по складу, я подсмотрел как в обработке POISK сделано
ТекстЗапроса = ТекстЗапроса + "LOWER("+РеквизитПоиска2+") LIKE '%"+ПодСтрокаП+"%' AND ";
Попробую также офомить и посмотрю что будет
  
Наверх
 
IP записан
 
ObmanOZ
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 24. Апреля 2019
Re: Остатки по регистру
Ответ #26 - 25. Декабря 2019 :: 09:16
Печать  
Да, заработал) Всем еще раз спасибо )
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Остатки по регистру
Ответ #27 - 25. Декабря 2019 :: 15:51
Печать  
ObmanOZ писал(а) 25. Декабря 2019 :: 09:16:
Да, заработал) Всем еще раз спасибо )

Раз заработало, значит я ошибся с LIKE ':СтрокаПоиска', видимо должно быть LIKE :СтрокаПоиска без одинарных ковычек.
SQL`я нет, чтобы проверить, и он был так давно, что уже и не припомню ;(

P.S. Отладка должна выдавать тот запрос, что передается в SQL, там было бы сразу видно двойные ковычки...
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать