Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите получить нулевые остатки по регистру (число прочтений - 2372 )
Alex_nps
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 18. Августа 2013
Пол: Мужской
Помогите получить нулевые остатки по регистру
28. Февраля 2014 :: 02:29
Печать  
Запрос выводит результат только если есть остатки по двум регистрам. Как получить результат если в одном регистре ноль???


           |SELECT
           |      Рег.Товар as [Товар $Справочник.Товары],
           |      Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
           |      Рег.КоличествоКонечныйОстаток as КоличествоКонОст,
           |      Рег.Период Период,
           |      РегСкл.Товар as [Товар $Справочник.Товары],
           |      (ISNULL(РегСкл.ОстатокТовараНачальныйОстаток,0)) as КоличествоСклНачОст,
           |      (ISNULL(РегСкл.ОстатокТовараКонечныйОстаток,0)) as КоличествоСклКонОст,                  
           |      РегСкл.Период Период
           |FROM
           |      $РегистрОстаткиОбороты.ОстаткиТоваровБух(:ВыбНачПериода, :ВыбКонПериода~, Квартал,ДвиженияИГраницыПериода,,
           |                                Фирма = :ВыбДокФирма AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар2) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар3),
           |                               (Товар), (Количество)) as Рег
           |FULL JOIN
           |      $РегистрОстаткиОбороты.ОстаткиТоваров(:ВыбНачПериода, :ВыбКонПериода~, Квартал,ДвиженияИГраницыПериода,,
           |                               Товар NOT IN (SELECT Val FROM #ВыбИсклТовар) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар2) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар3),
           |                               (Товар), (ОстатокТовара)) as РегСкл  
         |ON  
         |      Рег.Товар =РегСкл.Товар      AND Рег.Период = РегСкл.Период
           |";
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #1 - 28. Февраля 2014 :: 04:42
Печать  
В общем случае, я бы сделал так:
1. Запросом вытаскиваем всю работающую номенклатуру во временную таблицу
Код
Выбрать все
SELECT
DISTINCT Товар
INTO #tmpTovar
FROM
  (SELECT Рег.Товар FROM 1-йРегистр
  UNION ALL
  SELECT Рег.Товар FROM 2-йРегистр) as Выборка 


2. К получившейся таблице присоединяем выборки
Код
Выбрать все
SELECT ВТ.Товар,
...
FROM
  #tmpTovar LEFT JOIN 1-йРегистр
    ON ...
  LEFT JOIN 2-йРегистр
    ON ... 


3. Убираем за собой
Код
Выбрать все
DROP TABLE #tmpTovar 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #2 - 28. Февраля 2014 :: 07:04
Печать  
дальнейшее улучшение 2 попытаться сделать без временной таблицы
  
Наверх
 
IP записан
 
Alex_nps
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 18. Августа 2013
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #3 - 28. Февраля 2014 :: 08:10
Печать  
СПБ
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #4 - 03. Марта 2014 :: 06:02
Печать  
А может всё-таки UNION ALL ?
Почему-то все поначалу пытаются FULL JOIN для этих целей использовать (и я не исключение).

Код
Выбрать все
|SELECT
|	Рег.Товар as [Товар $Справочник.Товары],
|	Рег.Период Период,
|	Sum(Рег.КоличествоНачальныйОстаток) as КоличествоНачОст,
|	Sum(Рег.КоличествоКонечныйОстаток) as КоличествоКонОст,
|FROM
|	(
|	SELECT
|		Рег.Товар as Товар,
|		Рег.Период Период,
|		Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
|		Рег.КоличествоКонечныйОстаток as КоличествоКонОст
|	FROM
|			$РегистрОстаткиОбороты.ОстаткиТоваровБух(:ВыбНачПериода, :ВыбКонПериода~, Квартал,ДвиженияИГраницыПериода,,
|						  Фирма = :ВыбДокФирма AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар2) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар3),
|						 (Товар), (Количество)
|			) as Рег
|
|	UNION ALL
|
|	SELECT
|		РегСкл.Товар as Товар,
|		РегСкл.Период Период,
|		РегСкл.ОстатокТовараНачальныйОстаток as КоличествоНачОст,
|		РегСкл.ОстатокТовараКонечныйОстаток as КоличествоКонОст
|	FROM
|		$РегистрОстаткиОбороты.ОстаткиТоваров(:ВыбНачПериода, :ВыбКонПериода~, Квартал,ДвиженияИГраницыПериода,,
|					 Товар NOT IN (SELECT Val FROM #ВыбИсклТовар) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар2) AND Товар NOT IN (SELECT Val FROM #ВыбИсклТовар3),
|					 (Товар), (ОстатокТовара)
|		) as РегСкл
|	) Рег
|GROUP BY
|	Рег.Товар,
|	Рег.Период
 

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #5 - 03. Марта 2014 :: 08:57
Печать  
Маленькое замечание:
Код
Выбрать все
|		Рег.Товар as Товар,
|		Рег.Период Период,
|		Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
|		Рег.КоличествоКонечныйОстаток as КоличествоКонОст
|		0 as КоличествоСклНачОст,
|		0 as КоличествоСклКонОст
...
|		РегСкл.Товар as Товар,
|		РегСкл.Период Период,
|		0,
|		0
|		РегСкл.ОстатокТовараНачальныйОстаток,
|		РегСкл.ОстатокТовараКонечныйОстаток
 


ну и в суммы все это
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Помогите получить нулевые остатки по регистру
Ответ #6 - 03. Марта 2014 :: 09:25
Печать  
ага, упущение
и для полной кошерности лучше писать не 0 (это константа типа int) а 0.00 (это константа типа Numeric())
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать