Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе. (число прочтений - 13092 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #15 - 29. Октября 2012 :: 10:03
Печать  
ЗЫ: если уж тебе нужно видеть все строки со всеми товарами и складами из фильтра - то это НЕ ВСЕ вошедшие в запрос, если что.

Если уж очень хочется, то ВТ + union all
(select t1.val, t2.val,0 from #табличкаСТоваром,#табличкаCоСкладами)
ну и гроуп бай потом
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #16 - 29. Октября 2012 :: 11:29
Печать  
Процедура ОстаткиТоваров()
     ТЗ = СоздатьОбъект("ТаблицаЗначений");
     Запрос = СоздатьОбъект("ODBCRecordset"); Запрос.Отладка(Отладка);
     
   Запрос.УложитьСписокОбъектов(ВыбТовары, "#ВТТовары", "Справочник.Номенклатура");
     Запрос.УложитьСписокОбъектов(ВыбСклад, "#ВТСклады", "Справочник.МестаХранения");

     ТекстЗапроса="
     |      SELECT  
     |        РегОстатки.Товар as      идТовар,
     |            РегОстатки.Склад as идСклад,
     |            РегОстатки.ОстатокТовараОстаток as Остаток
   |      FROM
     |            $РегистрОстатки.ОстаткиТоваров(:ДатаКон~, ,
     |                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in ВТТовары) AND (Склад IN ВТСклады),    
       |                               (Фирма, Товар, Склад), (ОстатокТовара)) as РегОстатки";
       Запрос.УстановитьТекстовыйПараметр("ДатаКон", ДатаКон);
     ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
КонецПроцедуры
Запрос.УложитьСписокОбъектов(ВыбТовары, "#ВТТовары", "Справочник.Номенклатура");
{\TEST_QUERY_УЛОЖИТЬСПИСОК.ERT(10)}: Недопустимое значение третьего аргумента метода!
ВидЭлементов - тип: Строка. Вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов. Если параметр не указан, иерархического включения не происходит.

Напиши, что здесь не так? ВыбТовары и ВыбСклад - списки значений, в список ВыбТовары можно в подборе добавлять и группы и элементы.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #17 - 29. Октября 2012 :: 11:31
Печать  
1. Запрос.УложитьСписокОбъектов(ВыбТовары, "#ВТТовары", "Номенклатура");
2.  (Фирма, Товар, Склад) заменить на  (Товар, Склад), не нужно там лишнее поле, раз ты в селект листе его не выбираешь потом
3.   in #ВТТовары
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #18 - 29. Октября 2012 :: 11:41
Печать  
Процедура ОстаткиТоваров()
     ТЗ = СоздатьОбъект("ТаблицаЗначений");
     Запрос = СоздатьОбъект("ODBCRecordset"); Запрос.Отладка(Отладка);
     
   Запрос.УложитьСписокОбъектов(ВыбТовары,"#ВТТовары","Номенклатура"); //
     Запрос.УложитьСписокОбъектов(ВыбСклад, "#ВТСклады","МестаХранения"); //Справочник

     ТекстЗапроса="
     |      SELECT  
     |        РегОстатки.Товар as      идТовар,
     |            РегОстатки.Склад as идСклад,
     |            РегОстатки.ОстатокТовараОстаток as Остаток
   |      FROM
     |            $РегистрОстатки.ОстаткиТоваров(:ДатаКон~, ,
     |                               (Товар in #ВТТовары) AND (Склад IN #ВТСклады),    
       |                               (Товар, Склад), (ОстатокТовара)) as РегОстатки";
       Запрос.УстановитьТекстовыйПараметр("ДатаКон", ДатаКон);
     ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ_OUT.Загрузить(ТЗ);
КонецПроцедуры

message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '#ВТТовары'.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #19 - 29. Октября 2012 :: 11:43
Печать  
ээх..

(Товар in  (select val from #ВТТовары))  .... и т.д
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #20 - 29. Октября 2012 :: 11:44
Печать  
Уж вроде проще некуда, прямо мини-запрос, а все равно не работает,
Вот и пойми как с этой укладкой в список быть.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #21 - 29. Октября 2012 :: 11:46
Печать  
Vlad7131 писал(а) 29. Октября 2012 :: 11:44:
Уж вроде проще некуда, прямо мини-запрос, а все равно не работает,
Вот и пойми как с этой укладкой в список быть.


дык доку читать перед применением , там усё есть.. и в FAQ тоже
Улыбка
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #22 - 29. Октября 2012 :: 11:57
Печать  
Ура, сработало, вот только с пустым списком складов вышло 0 строк,
а как условие по складам убрал, то вышло все.
Если не выбрано ничего в список товаров - т.е. по Всем товарам,
или в склады - По Всем складам, то как здесь написать:
(Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады))
или просто текст запроса менять,убрать условие если ВыбТовар пустой?
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #23 - 29. Октября 2012 :: 12:01
Печать  
если уж тебе нужно видеть все строки со всеми товарами и складами из фильтра - то это НЕ ВСЕ вошедшие в запрос, если что.

Если уж очень хочется, то ВТ + union all
(select t1.val, t2.val,0 from #табличкаСТоваром,#табличкаCоСкладами)
ну и гроуп бай потом

Вот это не понял, что есть ВТ,t1,t1, можно запрос простенький?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #24 - 29. Октября 2012 :: 12:11
Печать  
[quote author=Vlad7131 link=1350469685/15#22 date=1351511852]Ура, сработало, вот только с пустым списком складов вышло 0 строк,
а как условие по складам убрал, то вышло все.
Если не выбрано ничего в список товаров - т.е. по Всем товарам,
или в склады - По Всем складам, то как здесь написать:
(Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады))
или просто текст запроса менять,убрать условие если ВыбТовар пустой?[/quote]

проще писать так:

заместо
(Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады))

втыкаешь (1=1 and 2=2)

далее, если список есть,то

ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1"," (Товар in (select val from #ВТТовары))");
и т.д

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #25 - 29. Октября 2012 :: 12:20
Печать  
Vlad7131 писал(а) 29. Октября 2012 :: 12:01:
если уж тебе нужно видеть все строки со всеми товарами и складами из фильтра - то это НЕ ВСЕ вошедшие в запрос, если что.

Если уж очень хочется, то ВТ + union all
(select t1.val, t2.val,0 from #табличкаСТоваром,#табличкаCоСкладами)
ну и гроуп бай потом

Вот это не понял, что есть ВТ,t1,t1, можно запрос простенький?


так, примерно.. тока  в ВТ параметры подставь свои:


Код
Выбрать все
|select  
|     Таб.Товар [Товар $Справочник.Номенклатура],
|	Таб.Склад [Склад $Справочник.Склады],
|	sum(Таб.Остаток) Остаток
| from
|( SELECT  
|	РегОстатки.Товар Товар,
|	РегОстатки.Склад Склад,
|	РегОстатки.ОстатокТовараОстаток Остаток
|	FROM
|		$РегистрОстатки.ОстаткиТоваров (.......) as РегОстатки
|	 Union all
| SELECT  
|	Р1.Товар,
|	Р2.Склад,
|	0
|	FROM
|		$РегистрОстатки.ОстаткиТоваров (.......) as Р1,$РегистрОстатки.ОстаткиТоваров (.......) as Р2 ) Таб
|Group by Таб.Товар,Таб.Склад  














  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #26 - 29. Октября 2012 :: 12:20
Печать  
СУПЕР!!!
Текст кода ужался почти в ноль, а работает также, еще и быстрее.
СПАСИБО!!!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #27 - 29. Октября 2012 :: 12:27
Печать  
только having выкинуть еще - тоды будет все вошедшие в запрос, а не только те, по которым есть останки..
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #28 - 29. Октября 2012 :: 12:30
Печать  
Тут 3 ВТ с тремя алиасами: as РегОстатки, as Р1 и as Р2,
параметры в них одни и те же подставлять? Как и в старом запросе:
     $РегистрОстатки.ОстаткиТоваров(:ДатаКон~, ,
     |                              (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
       |                               (Товар, Склад), (ОстатокТовара))
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #29 - 29. Октября 2012 :: 12:32
Печать  
да.
Не боись, скуль не тупой ..он выполнит этот запрос 1 раз.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать