Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите разобраться с запросом (нулевые остатки) (число прочтений - 2497 )
qop_akaki
Junior Member
**
Отсутствует



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Помогите разобраться с запросом (нулевые остатки)
01. Февраля 2011 :: 10:41
Печать  
     ТекстЗапросаОстатка = ПрямойЗапрос.ПодготовитьТекстЗапроса(
     "
     |Select
     |      ОстаткиПоВыбору.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
     |      ОстаткиПоВыбору.Фирма AS [Фирма $Справочник.Фирмы],
     |      ОстаткиПоВыбору.Склад AS [Склад $Справочник.Склады],
     |      $СпрНоменклатура.МинОстаток,
     |      ОстаткиПоВыбору.КоличествоОстаток AS [КоличествоОстаток $Число],
     |      $СпрНоменклатура.БазоваяЕдиница AS [БазоваяЕдиница $Справочник.Единицы],
     |      $СпрНоменклатура.ОсновнаяЕдиница AS [ОсновнаяЕдиница $Справочник.Единицы],
     |      $СпрНоменклатура.ОсновноеСвойство AS [ОсновноеСвойство $Справочник.СвойстваНоменклатуры]
     |      
     |From
     |      $РегистрОстатки.ОстаткиТМЦ(,((Номенклатура IN (Select val from #ВыбНоменклатура)) AND (Фирма = :ВыбФирма) AND (Склад = :ВыбСклад)),
     |                                              (Номенклатура, Фирма, Склад), (Количество)) As ОстаткиПоВыбору
     |   left join Справочник.Номенклатура как СпрНоменклатура $nolock on ОстаткиПоВыбору.Номенклатура = $СпрНоменклатура.ТекущийЭлемент
     |
     |Where (ОстаткиПоВыбору.КоличествоОстаток <= $СпрНоменклатура.МинОстаток) И ($СпрНоменклатура.МинОстаток <> 0)
     |");

Я так понял конечно что ($РегистрОстатки.ОстаткиТМЦ) не нулявой. Я исправил в ВыполнитьЗапросDBF() убрал HAVING Sum()<>0. Все ровно не все элементы берет с нулевыми остатками..  Очень довольный
  

Всем спасибо, я не понял!
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #1 - 01. Февраля 2011 :: 10:54
Печать  
1) ничего править не надо было в классе
2)
Код
Выбрать все
Select
     |	ОстаткиПоВыбору.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
     |	ОстаткиПоВыбору.Фирма AS [Фирма $Справочник.Фирмы],
     |	ОстаткиПоВыбору.Склад AS [Склад $Справочник.Склады],
     |	$СпрНоменклатура.МинОстаток,
     |	ОстаткиПоВыбору.КоличествоОстаток AS [КоличествоОстаток $Число],
     |	$СпрНоменклатура.БазоваяЕдиница AS [БазоваяЕдиница $Справочник.Единицы],
     |	$СпрНоменклатура.ОсновнаяЕдиница AS [ОсновнаяЕдиница $Справочник.Единицы],
     |	$СпрНоменклатура.ОсновноеСвойство AS [ОсновноеСвойство $Справочник.СвойстваНоменклатуры]
     |
     |From
     | Справочник.Номенклатура as СпрНом $nolock
     |LEFT JOIN
     |	$РегистрОстатки.ОстаткиТМЦ(,((Номенклатура IN (Select val from #ВыбНоменклатура)) AND (Фирма = :ВыбФирма) AND (Склад = :ВыбСклад)),
     |							    (Номенклатура, Фирма, Склад), (Количество)) As ОстаткиПоВыбору
     | ON ($СпрНом.ТекущийЭлемент = ОстаткиПоВыбору.Номенклатура)
     |
     |Where (ОстаткиПоВыбору.КоличествоОстаток <= $СпрНом.МинОстаток) И ($СпрНом.МинОстаток <> 0) И ($СпрНом.ЭтоГруппа = 0)
     |"); 

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



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #2 - 01. Февраля 2011 :: 11:05
Печать  
Не понял при чем здесь ЭтоГруппа. нулевых остатков от этого не появится... и ли я че не понял, вот отладка.... кстати

Результат = ПрямойЗапрос.Выполнить(,ТекстЗапросаОстатка,1);
{X:\1C_BASES\КОМПЛЕКСНАЯ\EXTFORMS\MINOSTATKI\МИНИМАЛЬНЫЕОСТАТКИ.ERT(341)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=Select
     ОстаткиПоВыбору.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
     ОстаткиПоВыбору.Фирма AS [Фирма $Справочник.Фирмы],
     ОстаткиПоВыбору.Склад AS [Склад $Справочник.Склады],
     СпрНоменклатура.МинОстаток,
     ОстаткиПоВыбору.КоличествоОстаток AS [КоличествоОстаток $Число],
     СпрНоменклатура.БазоваяЕдиница AS [БазоваяЕдиница $Справочник.Единицы],
     СпрНоменклатура.ОсновнаяЕдиница AS [ОсновнаяЕдиница $Справочник.Единицы],
     СпрНоменклатура.ОсновноеСвойство AS [ОсновноеСвойство $Справочник.СвойстваНоменклатуры]
     
From
     (
     SELECT
           Номенклатура
           ,Фирма
           ,Склад
           ,SUM(КоличествоОстаток) AS КоличествоОстаток
           
     FROM
           (SELECT
                 rg_405.Номенклатура AS Номенклатура
                 ,rg_405.Фирма AS Фирма
                 ,rg_405.Склад AS Склад
                 ,rg_405.Количество AS КоличествоОстаток
                 
           FROM
                 [РегистрИтоги.ОстаткиТМЦ] AS rg_405
           WHERE
                 rg_405.PERIOD = '20110201'
           AND
                 ((rg_405.Номенклатура IN (Select val from vt_ВыбНоменклатура)) AND (rg_405.Фирма = :ВыбФирма) AND (rg_405.Склад = :ВыбСклад))
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Фирма
           ,Склад
     HAVING (SUM(КоличествоОстаток) <> 0)
     
) As ОстаткиПоВыбору
  left join [Справочник.Номенклатура] AS СпрНоменклатура  on ОстаткиПоВыбору.Номенклатура = СпрНоменклатура.ID

Where (ОстаткиПоВыбору.КоличествоОстаток <= СпрНоменклатура.МинОстаток) AND (СпрНоменклатура.МинОстаток <> 0) AND ($СпрНом.ЭтоГруппа() = 0), Число БезПодготовки=1) : near "(": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
) }

а И ($СпрНом.ЭтоГруппа = 0) убирает группы из запроса впринцыпале правильное замечание... +1  Подмигивание
  

Всем спасибо, я не понял!
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #3 - 01. Февраля 2011 :: 11:13
Печать  
Уважаемый, будьте внимательней пожалуйста.
В моем тексте запроса написано:
Код
Выбрать все
 |Where (ОстаткиПоВыбору.КоличествоОстаток <= $СпрНом.МинОстаток) И ($СпрНом.МинОстаток <> 0) И ($СпрНом.ЭтоГруппа = 0) 


в вашем:
Код
Выбрать все
Where (ОстаткиПоВыбору.КоличествоОстаток <= СпрНоменклатура.МинОстаток) AND (СпрНоменклатура.МинОстаток <> 0) AND ($СпрНом.ЭтоГруппа() = 0) 


Найдите 1 отличие.
А суть в том что надо к справочнику товаров (то есть к элементам справочника) подцепить левым соединением остатки. Тогда отобразятся и позиции по которым нет остатка и позиции по которым есть остаток.
Вот исправленный текст запроса - я в своем еще кое-какие ошибки допустил
Код
Выбрать все
Select
     |	$СпрНом.ТекущийЭлемент КАК [Номенклатура $Справочник.Номенклатура],
     |	ISNULL(ОстаткиПоВыбору.Фирма, $ПустойИД) КАК [Фирма $Справочник.Фирмы],
     |	ISNULL(ОстаткиПоВыбору.Склад, $ПустоИД)  КАК [Склад $Справочник.Склады],
     |	$СпрНоменклатура.МинОстаток,
     |	ISNULL(ОстаткиПоВыбору.КоличествоОстаток,0) КАК [КоличествоОстаток $Число],
     |	$СпрНом.БазоваяЕдиница КАК [БазоваяЕдиница $Справочник.Единицы],
     |	$СпрНом.ОсновнаяЕдиница КАК [ОсновнаяЕдиница $Справочник.Единицы],
     |	$СпрНом.ОсновноеСвойство КАК [ОсновноеСвойство $Справочник.СвойстваНоменклатуры]
     |
     |From
     | Справочник.Номенклатура as СпрНом $nolock
     |LEFT JOIN
     |	$РегистрОстатки.ОстаткиТМЦ(,((Номенклатура IN (Select val from #ВыбНоменклатура)) AND (Фирма = :ВыбФирма) AND (Склад = :ВыбСклад)),
     |							    (Номенклатура, Фирма, Склад), (Количество)) As ОстаткиПоВыбору
     | ON ($СпрНом.ТекущийЭлемент = ОстаткиПоВыбору.Номенклатура)
     |
     |Where (ОстаткиПоВыбору.КоличествоОстаток <= $СпрНом.МинОстаток) И ($СпрНом.МинОстаток <> 0) И ($СпрНом.ЭтоГруппа = 0)
     |");  

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



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #4 - 01. Февраля 2011 :: 11:18
Печать  
про () я опечатку сделал, по итогу

Where (ОстаткиПоВыбору.КоличествоОстаток <= СпрНом.МинОстаток) AND (СпрНом.МинОстаток <> 0) AND (CASE WHEN СпрНом.ISFOLDER = 1 THEN 1 ELSE 0 END = 0), Число БезПодготовки=1) : no such column: $ПустойИД
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
) }
  

Всем спасибо, я не понял!
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #5 - 01. Февраля 2011 :: 11:37
Печать  
Код
Выбрать все
 |	ISNULL(ОстаткиПоВыбору.Склад, $ПустоИД)  КАК [Склад $Справочник.Склады], 


заменить на
Код
Выбрать все
 |	ISNULL(ОстаткиПоВыбору.Склад, $ПустойИД)  КАК [Склад $Справочник.Склады], 

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



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #6 - 02. Февраля 2011 :: 02:29
Печать  
Изменено:
|      ISNULL(ОстаткиПоВыбору.Склад, $ПустойИД)  КАК [Склад $Справочник.Склады], таже ошибка нет колонки $ПустойИД, заменил на 0 заработало, только тоже не вижу надобность в этой функции здесь???




Абсолютно идентичный результат, нулевые остатки не появились...  Ужас

Помогите пожалуйста ааа.... горю...
  

Всем спасибо, я не понял!
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #7 - 02. Февраля 2011 :: 11:12
Печать  
может вот так:
Код
Выбрать все
isnull(ОстаткиПоВыбору.КоличествоОстаток,0) <= $СпрНоменклатура.МинОстаток 


да и вообще попробуй без этого условия
  
Наверх
IP записан
 
qop_akaki
Junior Member
**
Отсутствует



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Помогите разобраться с запросом (нулевые остатки)
Ответ #8 - 02. Февраля 2011 :: 11:14
Печать  
Что странное без условия тоже нет нулевых остатков.
  

Всем спасибо, я не понял!
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать