Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) SQL. / УложитьСписокОбъектов(). (число прочтений - 8998 )
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
SQL. / УложитьСписокОбъектов().
20. Мая 2008 :: 08:43
Печать  
Есть вот такая балалайка:
[code]
     ТекстЗапроса = "
           |SELECT $Остатки.Товар [Товар $Справочник.Товары]
           |      , Sum($Остатки.Кво) СуммаКво
           |      , Sum($Остатки.СуммаПродажи) СуммаСуммаПродажи
           |FROM $Регистр.Остатки AS Остатки With (NOLOCK)
           |WHERE      (Остатки.date_time_iddoc Between :НачДата And :КонДата~)
           |      AND  $Остатки.ХозОперация IN (SELECT VAL FROM #XO)
           | And  $Остатки.Контрагент IN (Select 'B1'+Val From #KA)
           |GROUP BY $Остатки.Товар
           |";
           
     рс.УложитьСписокОбъектов(сзТоргОперации, "#XO", "ХозОперации");
     рс.УложитьСписокОбъектов13(сзКонтрагенты, "#KA");
     рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
     рс.УстановитьТекстовыйПараметр("КонДата", КонДата);
     тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
     тз.ВыбратьСтроку();

[/code]

сзТоргОперации - содержит список объектов справочника ХозОперации. Здесь все пучком работает.
сзКонтрагенты - содержит список объектов из двух справочников: Контрагенты и Склады. По той же причине в регистре Остатки.Контрагент - тип неопределенный. И вот здесь работать не хочет.  Группы справочников тоже не воспринимает.
Что мне делать?:
1. Создавать два списка (для каждого справочника с указанием типа справочника) и для каждого свое условие Where?
2. Обрабатывать выборку и "вытаскивать" элементы груп, чтобы в списке были только элементы справочников?
Оба метода довольно муторные. Может кто подскажет более изящный метод заставить заиграть эту "балалайку"?

И еще вопросс разработчикам: какие еще есть технологические модификаторы функций кроме, например числа 13 - УложитьСписокОбъектов13?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: SQL. / УложитьСписокОбъектов().
Ответ #1 - 20. Мая 2008 :: 08:51
Печать  
Код
Выбрать все
ТекстЗапроса = "
		|SELECT $Остатки.Товар [Товар $Справочник.Товары]
		|	, Sum($Остатки.Кво) СуммаКво
		|	, Sum($Остатки.СуммаПродажи) СуммаСуммаПродажи
		|FROM $Регистр.Остатки AS Остатки With (NOLOCK)
		|WHERE 	(Остатки.date_time_iddoc Between :НачДата And :КонДата~)
		|	AND  $Остатки.ХозОперация IN (SELECT VAL FROM #XO)
		| And  $Остатки.Контрагент IN (Select 'B1'+Val From #KA1
		|				     UNION ALL
		|				     Select 'B1'+Val From   #KA2)
		|GROUP BY $Остатки.Товар
		|";

	рс.УложитьСписокОбъектов(сзТоргОперации, "#XO", "ХозОперации");
	рс.УложитьСписокОбъектов13(сзКонтрагенты1, "#KA1","Склады");
	рс.УложитьСписокОбъектов13(сзКонтрагенты2, "#KA2","Контрагенты");
	рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
	рс.УстановитьТекстовыйПараметр("КонДата", КонДата);
	тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
	тз.ВыбратьСтроку();

 



Как то так
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: SQL. / УложитьСписокОбъектов().
Ответ #2 - 20. Мая 2008 :: 08:55
Печать  
если Контрагентов не много, то можно получить их ИД перед выполнением запроса (в списке значений), а потом в текст запроса вставить
Код
Выбрать все
$Остатки.Контрагент IN ("+списКонтр+") 



списКонтр должен быть в виде:
'<ID1>','<ID2>'...'IDN'

ID Контрагентов также должны включать вид справочника
  
Наверх
 
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #3 - 20. Мая 2008 :: 08:56
Печать  
Это понятно... Так решается вопросс элементов двух справочников, а вопрос групп справочников остается висеть...
  
Наверх
 
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #4 - 20. Мая 2008 :: 09:00
Печать  
sml писал(а) 20. Мая 2008 :: 08:55:
если Контрагентов не много, то можно получить их ИД перед выполнением запроса (в списке значений), а потом в текст запроса вставить
Код
Выбрать все
$Остатки.Контрагент IN ("+списКонтр+") 



списКонтр должен быть в виде:
'<ID1>','<ID2>'...'IDN'

ID Контрагентов также должны включать вид справочника



тоже думал над этим (тем более, что при  типе неопределенный  она даже в селекте выдает именно ИД).  Но ИД для группы справочника как-то не то....
контрагентов много, пок райней мере выбирать ручками и внутри групп очень напряжно.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: SQL. / УложитьСписокОбъектов().
Ответ #5 - 20. Мая 2008 :: 09:01
Печать  
Код
Выбрать все
(Select 'B1'+Val From #KA) 



а это че за хрень такая?
  
Наверх
 
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #6 - 20. Мая 2008 :: 09:04
Печать  
sml писал(а) 20. Мая 2008 :: 09:01:
Код
Выбрать все
(Select 'B1'+Val From #KA) 



а это че за хрень такая?


Это я забыл убрать - отладочный вариант: тип справочника, как он "сидит" в базе. (правда помогло оно мне, как сухой попе присыпка...)
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: SQL. / УложитьСписокОбъектов().
Ответ #7 - 20. Мая 2008 :: 09:06
Печать  
VasilyKushnir писал(а) 20. Мая 2008 :: 09:04:
sml писал(а) 20. Мая 2008 :: 09:01:
Код
Выбрать все
(Select 'B1'+Val From #KA) 



а это че за хрень такая?


Это я забыл убрать - отладочный вариант: тип справочника, как он "сидит" в базе. (правда помогло оно мне, как сухой попе присыпка...)

а убрать эту хрень и оставить "Уложить...13()" пробовал?
  
Наверх
 
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #8 - 20. Мая 2008 :: 09:08
Печать  
Да по разному пробовал...  Лопата в том похоже, что Контрагент в регистре Неопределенный - отсюда и проблемы.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: SQL. / УложитьСписокОбъектов().
Ответ #9 - 20. Мая 2008 :: 09:21
Печать  
Мой вариант пробвал?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: SQL. / УложитьСписокОбъектов().
Ответ #10 - 20. Мая 2008 :: 09:24
Печать  
УложитьСписокОбъектов13 не разворачивает группы. Попробуй УложитьСписокОбъектов и

SELECT 'B1' + $ВидСправочника36.Контрагенты + Val
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: SQL. / УложитьСписокОбъектов().
Ответ #11 - 20. Мая 2008 :: 09:31
Печать  
VasilyKushnir писал(а) 20. Мая 2008 :: 09:00:
контрагентов много, пок райней мере выбирать ручками и внутри групп очень напряжно.


Я бы посмотрел в сторону алгоритма ПОЛУЧЕНИЯ списка и включения ЭТОГО в виде подзапроса
Имхо канечна...
Или много лишнего времени у сервера?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #12 - 20. Мая 2008 :: 09:38
Печать  
Nick писал(а) 20. Мая 2008 :: 09:21:
Мой вариант пробвал?

Как раз сейчас пробую - только отвлекают черти (спасу нету от юзеров).
И вариант
berezdetsky
УложитьСписокОбъектов13 не разворачивает группы. Попробуй УложитьСписокОбъектов и

SELECT 'B1' + $ВидСправочника36.Контрагенты + Val

тоже очень привлекательный.

Модификатор 36 - что за зверь?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: SQL. / УложитьСписокОбъектов().
Ответ #13 - 20. Мая 2008 :: 09:40
Печать  
Цитата:
Как раз сейчас пробую - только отвлекают черти (спасу нету от юзеров).
И вариант 
berezdetsky
УложитьСписокОбъектов13 не разворачивает группы. Попробуй УложитьСписокОбъектов и 
 
SELECT 'B1' + $ВидСправочника36.Контрагенты + Val 

тоже очень привлекательный.


Ага это тоже нужно
  
Наверх
ICQ  
IP записан
 
VasilyKushnir
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 38
Зарегистрирован: 13. Сентября 2007
Re: SQL. / УложитьСписокОбъектов().
Ответ #14 - 20. Мая 2008 :: 09:47
Печать  
Все! Достали юзеры. Иду в серверную, закроюсь - иначе толком не дадут поработать. Вот все варианты сейчас и проиграю.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать