Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) переделать на прямой запрос [ГОТОВО] (число прочтений - 4403 )
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
переделать на прямой запрос [ГОТОВО]
28. Июня 2010 :: 07:10
Печать  
Есть запрос:      
     |Период с '" + НачДата + "' по '" + КонДата +"';
     |Без итогов;
     |РРА = Документ.РНА.ТекущийДокумент, Документ.РНАС.ТекущийДокумент, Документ.РРА.ТекущийДокумент, Документ.РРАС.ТекущийДокумент;
     |Товар = Документ.РРАС.Товар, Документ.РРА.Товар, Документ.РНАС.Товар, Документ.РНА.Товар;
     |Упаковок = Документ.РНА.Упаковок, Документ.РНАС.Упаковок, Документ.РРА.Упаковок, Документ.РРАС.Упаковок;
     |Единиц = Документ.РРАС.Единиц, Документ.РРА.Единиц, Документ.РНАС.Единиц, Документ.РНА.Единиц;
     |Склад = Документ.РНА.Склад, Документ.РНАС.Склад, Документ.РРА.Склад, Документ.РРАС.Склад;
     |Группировка РРА;
     |Группировка Товар без групп;
     |Группировка Упаковок;
     |Группировка Единиц;
     |";

подскажите как переделать на прямой, в какую сторону глядеть Улыбка
неплохо было б пример подобного, но на прямом запросе.
« Последняя редакция: 28. Июня 2010 :: 10:22 - DrWeb »  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #1 - 28. Июня 2010 :: 07:34
Печать  
смотреть в сторону UNION ALL
  
Наверх
IP записан
 
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
Re: переделать на прямой запрос
Ответ #2 - 28. Июня 2010 :: 08:09
Печать  
то есть для каждого документа будет свой запрос которые объединяются по средствам union all в единый?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #3 - 28. Июня 2010 :: 08:13
Печать  
ytt DrWeb писал(а) 28. Июня 2010 :: 08:09:
то есть для каждого документа будет свой запрос которые объединяются по средствам union all в единый?

Именно, а на верхнем уровне суммирование и группировка.
  
Наверх
IP записан
 
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
Re: переделать на прямой запрос
Ответ #4 - 28. Июня 2010 :: 09:42
Печать  
если правильно понял, то должно было получиться что-то подобное этому:

     |SELECT
     |      Таб.Док as [Док $Документ],
     |      Таб.Товар as [Товар $Справочник.ТоварыА],
     |      SUM(Таб.Упаковок) AS Упаковок,
     |      SUM(Таб.Единиц) AS Единиц,
     |      SUM(Таб.Склад) AS Склад
     |FROM
     |      (SELECT
     |            Таб.Док as [Док $Документ],
     |            Таб.Товар as [Товар $Справочник.ТоварыА],
     |            Таб.Упаковок,
     |            Таб.Единиц,
     |            Таб.Склад
     |      FROM
     |            (
     |            SELECT
     |                  РРАСтроки.IDDOC [Док $Документ.РРА]
     |                  ,$РРАСтроки.Товар [Товар $Справочник.ТоварыА]
     |                  ,$РРАСтроки.Упаковок Упаковок
     |                  ,$РРАСтроки.Единиц Единиц
     |                  ,$РРАСтроки.Склад Склад
     |            FROM $ДокументСтроки.РРА AS РРАСтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РРА AS РРА With (NOLOCK) ON РРАСтроки.IDDOC = РРА.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РРАСтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РРАСтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РРАССтроки.IDDOC [Док $Документ.РРАС]
     |                  ,$РРАССтроки.Товар [Товар $Справочник.ТоварыА]
     |                  ,$РРАССтроки.Упаковок Упаковок
     |                  ,$РРАССтроки.Единиц Единиц
     |                  ,$РРАССтроки.Склад Склад
     |            FROM $ДокументСтроки.РРАС AS РРАССтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РРАС AS РРАС With (NOLOCK) ON РРАССтроки.IDDOC = РРАС.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РРАССтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РРАССтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РНАСтроки.IDDOC [Док $Документ.РНА]
     |                  ,$РНАСтроки.Товар [Товар $Справочник.ТоварыА]
     |                  ,$РНАСтроки.Упаковок Упаковок
     |                  ,$РНАСтроки.Единиц Единиц
     |                  ,$РНАСтроки.Склад Склад
     |            FROM $ДокументСтроки.РНА AS РНАСтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РНА AS РНА With (NOLOCK) ON РНАСтроки.IDDOC = РНА.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РНАСтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАСтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РНАССтроки.IDDOC [Док $Документ.РНАС]
     |                  ,$РНАССтроки.Товар [Товар $Справочник.ТоварыА]
     |                  ,$РНАССтроки.Упаковок Упаковок
     |                  ,$РНАССтроки.Единиц Единиц
     |                  ,$РНАССтроки.Склад Склад
     |            FROM $ДокументСтроки.РНАС AS РНАССтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РНАС AS РНАС With (NOLOCK) ON РНАССтроки.IDDOC = РНАС.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РНАССтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАССтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |            ) Таб
     |      ) Таб
     |GROUP BY
     |      Товар
     |";

Но к сожалению при выполнении выдает ошибку:
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Док'.
подскажите что не так
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #5 - 28. Июня 2010 :: 09:44
Печать  
Оставь типизацию только на самом верхнем уровне.
  
Наверх
IP записан
 
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
Re: переделать на прямой запрос
Ответ #6 - 28. Июня 2010 :: 09:53
Печать  
вроде поехало выполняться но в итоге:
Для типизации поля "Док", не найдено дополнительное типизирующее поле.
на верхнем уровне следущее:
     |      Таб.Док as [Док $Документ],
     |      Таб.Товар as [Товар $Справочник.ТоварыА],
     |      SUM(Таб.Упаковок) AS Упаковок,
     |      SUM(Таб.Единиц) AS Единиц,
     |      SUM(Таб.Склад) AS Склад
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #7 - 28. Июня 2010 :: 09:55
Печать  
Добавь в выборку каждого документа вот сюда
Код
Выбрать все
 |			РРАССтроки.IDDOC Док
 |			,Журнал.IDDOCDEF as Док_вид  


Ну и соответственно вверх вытащи
Док_вид
  
Наверх
IP записан
 
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
Re: переделать на прямой запрос
Ответ #8 - 28. Июня 2010 :: 10:18
Печать  
взлетело!
leshik, благодарю!
вот, для тех кому будет интересно что получилось, готовый и вроде бы рабочий вариант прямого запроса:

     |SELECT
     |      Таб.Док as [Док $Документ],
     |      Таб.Док_вид as Док_вид,
     |      Таб.Товар as [Товар $Справочник.ТоварыА],
     |      SUM(Таб.Упаковок) AS Упаковок,
     |      SUM(Таб.Единиц) AS Единиц,
     |      SUM(Таб.Склад) AS Склад
     |FROM
     |      (SELECT
     |            Таб.Док as Док,
     |            Таб.Док_вид as Док_вид,
     |            Таб.Товар as Товар,
     |            Таб.Упаковок,
     |            Таб.Единиц,
     |            Таб.Склад
     |      FROM
     |            (
     |            SELECT
     |                  РРАСтроки.IDDOC Док
     |                  ,Журнал.IDDOCDEF as Док_вид
     |                  ,$РРАСтроки.Товар Товар
     |                  ,$РРАСтроки.Упаковок Упаковок
     |                  ,$РРАСтроки.Единиц Единиц
     |                  ,$РРАСтроки.Склад Склад
     |            FROM $ДокументСтроки.РРА AS РРАСтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РРА AS РРА With (NOLOCK) ON РРАСтроки.IDDOC = РРА.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РРАСтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РРАСтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РРАССтроки.IDDOC Док
     |                  ,Журнал.IDDOCDEF as Док_вид
     |                  ,$РРАССтроки.Товар Товар
     |                  ,$РРАССтроки.Упаковок Упаковок
     |                  ,$РРАССтроки.Единиц Единиц
     |                  ,$РРАССтроки.Склад Склад
     |            FROM $ДокументСтроки.РРАС AS РРАССтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РРАС AS РРАС With (NOLOCK) ON РРАССтроки.IDDOC = РРАС.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РРАССтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РРАССтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РНАСтроки.IDDOC Док
     |                  ,Журнал.IDDOCDEF as Док_вид
     |                  ,$РНАСтроки.Товар Товар
     |                  ,$РНАСтроки.Упаковок Упаковок
     |                  ,$РНАСтроки.Единиц Единиц
     |                  ,$РНАСтроки.Склад Склад
     |            FROM $ДокументСтроки.РНА AS РНАСтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РНА AS РНА With (NOLOCK) ON РНАСтроки.IDDOC = РНА.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РНАСтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАСтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |
     |            UNION ALL
     |
     |            SELECT
     |                  РНАССтроки.IDDOC Док
     |                  ,Журнал.IDDOCDEF as Док_вид
     |                  ,$РНАССтроки.Товар Товар
     |                  ,$РНАССтроки.Упаковок Упаковок
     |                  ,$РНАССтроки.Единиц Единиц
     |                  ,$РНАССтроки.Склад Склад
     |            FROM $ДокументСтроки.РНАС AS РНАССтроки With (NOLOCK)
     |                  INNER JOIN $Документ.РНАС AS РНАС With (NOLOCK) ON РНАССтроки.IDDOC = РНАС.IDDOC
     |                  INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON РНАССтроки.IDDOC = Журнал.IDDOC
     |              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАССтроки.Товар = Товар.ID
     |            WHERE
     |                  (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
     |            ) Таб
     |      ) Таб
     |GROUP BY
     |      Таб.Док,
     |      Таб.Док_вид,
     |      Таб.Товар
     |";
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #9 - 28. Июня 2010 :: 10:22
Печать  
Оно на производительность конечно не влияет но обертка
Код
Выбрать все
 (SELECT
     |		Таб.Док as Док,
     |		Таб.Док_вид as Док_вид,
     |		Таб.Товар as Товар,
     |		Таб.Упаковок,
     |		Таб.Единиц,
     |		Таб.Склад
     |	FROM 


Лишняя сама по себе - можно и без неё.
Цитата:
взлетело!
leshik, благодарю!

Да не за что Подмигивание
  
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: переделать на прямой запрос [ГОТОВО]
Ответ #10 - 28. Июня 2010 :: 10:23
Печать  
По-моему, одни уровень - лишний.

leshik опередил Подмигивание
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: переделать на прямой запрос
Ответ #11 - 28. Июня 2010 :: 10:23
Печать  
Зачем соединение с табличкой Шапки документа и табличкой Справочника, если по ним нет ни выборки, ни условий ?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #12 - 28. Июня 2010 :: 10:25
Печать  
Eprst писал(а) 28. Июня 2010 :: 10:23:
Зачем соединение с табличкой Шапки документа и табличкой Справочника, если по ним нет ни выборки, ни условий ?

1) согласен - соединение с шапкой журнала не обязательно можно соединить IDDOC из строк с Журналом.
2) Ну да - точно вроде не нужно.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переделать на прямой запрос [ГОТОВО]
Ответ #13 - 28. Июня 2010 :: 10:28
Печать  
в каждом селекте обязательно нужно добавить
Журнал.iddocdef = $ВидДокумента.<СоответствВид>
  

1&&2&&3
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос [ГОТОВО]
Ответ #14 - 28. Июня 2010 :: 10:29
Печать  
trad писал(а) 28. Июня 2010 :: 10:28:
в каждом селекте обязательно нужно добавить
Журнал.iddocdef = $ВидДокумента.<СоответствВид>

Для попадания в индекс?
Ведь так же все равно идет соединение INNER с табличной частью документа нужного вида?
  
Наверх
IP записан
 
DrWeb
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 28. Июня 2010
Re: переделать на прямой запрос
Ответ #15 - 28. Июня 2010 :: 10:35
Печать  
leshik писал(а) 28. Июня 2010 :: 10:25:
Eprst писал(а) 28. Июня 2010 :: 10:23:
Зачем соединение с табличкой Шапки документа и табличкой Справочника, если по ним нет ни выборки, ни условий ?

1) согласен - соединение с шапкой журнала не обязательно можно соединить IDDOC из строк с Журналом.
2) Ну да - точно вроде не нужно.


то есть из каждой выборки я могу убрать вот эти строчки?
|              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАССтроки.Товар = Товар.ID
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: переделать на прямой запрос
Ответ #16 - 28. Июня 2010 :: 10:42
Печать  
DrWeb писал(а) 28. Июня 2010 :: 10:35:
leshik писал(а) 28. Июня 2010 :: 10:25:
Eprst писал(а) 28. Июня 2010 :: 10:23:
Зачем соединение с табличкой Шапки документа и табличкой Справочника, если по ним нет ни выборки, ни условий ?

1) согласен - соединение с шапкой журнала не обязательно можно соединить IDDOC из строк с Журналом.
2) Ну да - точно вроде не нужно.


то есть из каждой выборки я могу убрать вот эти строчки?
|              INNER JOIN $Справочник.ТоварыА AS Товар With (NOLOCK) ON $РНАССтроки.Товар = Товар.ID

И вот эту:
Код
Выбрать все
		 INNER JOIN $Документ.РРА AS РРА With (NOLOCK) ON РРАСтроки.IDDOC = РРА.IDDOC
     | 


  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: переделать на прямой запрос [ГОТОВО]
Ответ #17 - 28. Июня 2010 :: 10:55
Печать  
leshik писал(а) 28. Июня 2010 :: 10:29:
trad писал(а) 28. Июня 2010 :: 10:28:
в каждом селекте обязательно нужно добавить
Журнал.iddocdef = $ВидДокумента.<СоответствВид>

Для попадания в индекс?
да
  

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