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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #30 - 29. Октября 2012 :: 12:38
Печать  
Собрался выкинуть having, скопировал в буфер, вставил в management studio,
Invalid object name '#ВТТовары'.
Парсер не переводит в понятное для sql имя #ВТТовары:
(ra99_vt.sp101 in (select val from #ВТТовары))

А в 1С-ке все работает.
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #32 - 29. Октября 2012 :: 12:47
Печать  
Так и сделал, убрал having, но вышло 5 строк, буду пробовать вариант с 3 ВТ.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #33 - 29. Октября 2012 :: 12:49
Печать  
Vlad7131 писал(а) 29. Октября 2012 :: 12:42:
Может вставить переведенный парсером текст запроса вместо старого текста запроса в 1С отчет, убрать having и  пройдет?


Можешь пока и не убирать having, думаю, тебе при конОст этого не нужно совсем.
А так, убирается просто - обрМетаsql  имеем текст запроса, из него стрзаменить и скармливаем в выполнитьинструкию..



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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #34 - 29. Октября 2012 :: 12:53
Печать  
А что такое обрМетаsql ? Это метод такой есть?
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #36 - 30. Октября 2012 :: 04:29
Печать  
Запрос выдает ошибку:][SQL Server]Incorrect syntax near '20121016Z'.
Я уже стал пробовать его частями запускать, все равно.
Это в 1С:
| SELECT  
|      Р1.Товар,
|      Р2.Склад,
|      0
|      FROM
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р1,
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р2";
А это после парсинга:
SELECT  
     Р1.Товар,
     Р2.Склад,
     0
     FROM
           (
select
rg99_vt.sp3603 as Фирма,
rg99_vt.sp101 as Товар,
rg99_vt.sp100 as Склад,
rg99_vt.sp102 as ОстатокТовараОстаток
from rg99 as rg99_vt (nolock)
where rg99_vt.period={d '2012-10-01'}
and (
rg99_vt.sp102 <> 0
)
) as Rests99('20121016Z', ,
                              (Фирма='     0   ') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
                              (Товар, Склад), (ОстатокТовара)) as Р1,
           (
select
rg99_vt.sp3603 as Фирма,
rg99_vt.sp101 as Товар,
rg99_vt.sp100 as Склад,
rg99_vt.sp102 as ОстатокТовараОстаток
from rg99 as rg99_vt (nolock)
where rg99_vt.period={d '2012-10-01'}
and (
rg99_vt.sp102 <> 0
)
) as Rests99('20121016Z', ,
                              (Фирма='     0   ') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
                              (Товар, Склад), (ОстатокТовара)) as Р2
...[SQL Server]Incorrect syntax near '20121016Z'.
Какие то странные алиасы Rests99, да еще 2 одинаковых.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #37 - 30. Октября 2012 :: 04:42
Печать  
Eprst писал(а) 29. Октября 2012 :: 12:27:
только having выкинуть еще - тоды будет все вошедшие в запрос, а не только те, по которым есть останки..


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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #38 - 30. Октября 2012 :: 05:08
Печать  
Satans Claws писал(а) 30. Октября 2012 :: 04:42:
емнип, полный пересчет итогов их вынесет, например.


Нифига подобного.
Разве что выгрузка-загрузка, либо явное удаление таблички итогов и пересчет их.

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #39 - 30. Октября 2012 :: 05:13
Печать  
[quote author=Vlad7131 link=1350469685/30#36 date=1351571357]Запрос выдает ошибку:][SQL Server]Incorrect syntax near '20121016Z'.

Какие то странные алиасы Rests99, да еще 2 одинаковых.
[/quote]

[quote]period={d '2012-10-01'} ?[/quote]

?

ты каким объектом запрос то делаешь ?
больше кода.
На счет алиясов - там всё правильно

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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #40 - 30. Октября 2012 :: 05:34
Печать  
Запрос = СоздатьОбъект("ODBCRecordset");
   ТекстЗапроса="        
|select  
|     Таб.Товар [Товар $Справочник.Номенклатура],
|      Таб.Склад [Склад $Справочник.МестаХранения],
|      sum(Таб.Остаток) Остаток
| from
|( SELECT  
|      РегОстатки.Товар Товар,
|      РегОстатки.Склад Склад,
|      РегОстатки.ОстатокТовараОстаток Остаток
|      FROM
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, , ,
|                               (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as РегОстатки
|       Union all
| SELECT  
|      Р1.Товар,
|      Р2.Склад,
|      0
|      FROM
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р1,
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р2";
) Таб
|Group by Таб.Товар,Таб.Склад";  
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #41 - 30. Октября 2012 :: 06:40
Печать  
Ё...

Код
Выбрать все
|		$РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|					 (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),
|					 (Товар, Склад), (ОстатокТовара)) as Р2";
) Таб
 


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


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #42 - 30. Октября 2012 :: 07:18
Печать  
Это я комментировал, чтобы получить меньший запрос и потом забыл убрать,
Все равно та же ошибка:SQL Server]Incorrect syntax near '20121016Z'.
ТекстЗапроса="        
|select  
|     Таб.Товар [Товар $Справочник.Номенклатура],
|      Таб.Склад [Склад $Справочник.МестаХранения],
|      sum(Таб.Остаток) Остаток
| from
|( SELECT  
|      РегОстатки.Товар Товар,
|      РегОстатки.Склад Склад,
|      РегОстатки.ОстатокТовараОстаток Остаток
|      FROM
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, , ,
//|                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as РегОстатки
|       Union all
| SELECT  
|      Р1.Товар,
|      Р2.Склад,
|      0
|      FROM
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р1,
|            $РегистрОстатки.ОстаткиТоваров (:ДатаКон~, ,
|                               (Фирма='"+МД.ЗначениеВСтрокуБД(ПустаяФирма)+"') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
|                               (Товар, Склад), (ОстатокТовара)) as Р2
|) Таб
|Group by Таб.Товар,Таб.Склад";  
  
Наверх
 
IP записан
 
Vlad7131
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 74
Зарегистрирован: 06. Октября 2012
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #43 - 30. Октября 2012 :: 07:20
Печать  
Т.е. где то здесь:
select
rg99_vt.sp3603 as Фирма,
rg99_vt.sp101 as Товар,
rg99_vt.sp100 as Склад,
rg99_vt.sp102 as ОстатокТовараОстаток
from rg99 as rg99_vt (nolock)
where rg99_vt.period={d '2012-10-01'}
and (
rg99_vt.sp102 <> 0
)
) as Rests99('20121016Z', ,
                              (Фирма='     0   ') AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),    
                              (Товар, Склад), (ОстатокТовара)) as Р1,
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ВСЕ Вошедшие в запрос для вывода товара с нулевым остатком на складе.
Ответ #44 - 30. Октября 2012 :: 07:26
Печать  
Код
Выбрать все
|		$РегистрОстатки.ОстаткиТоваров (:ДатаКон~,,
|					 (Фирма=$ПустойИД) AND (Товар in (select val from #ВТТовары)) AND (Склад in (select val from #ВТСклады)),  

 

Запрос.Отладка(1)

что возвращает ?

1cpp какой версии у тебя ?
в Меню-Помощь-О программе, что светится ?



  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать