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



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Не могу разобраться
16. Сентября 2008 :: 11:38
Печать  
Код
Выбрать все
ТекстЗапроса = "
|SELECT Материалы.Code [Code $Число]
|	   ,Материалы.ID [Материал $Справочник.Материалы]
|FROM $Справочник.Материалы AS Материалы (NOLOCK)
|WHERE
|	(Материалы.ID IN (SELECT Val FROM #Группа))
|";
RS.УложитьСписокОбъектов(Родитель,"#Группа");
 



Запрос не возвращает элементы которые входят в группу
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #1 - 16. Сентября 2008 :: 12:20
Печать  
Может поделиться кто опытом как выбрать элементы входящие в выбранную группу
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Не могу разобраться
Ответ #2 - 16. Сентября 2008 :: 12:36
Печать  
Код
Выбрать все
RS.УложитьСписокОбъектов(Родитель,"#Группа","ВидТвоегоСправочника"); 


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



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #3 - 16. Сентября 2008 :: 12:43
Печать  
Пасиб, Улыбка, как то даже стыдно
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не могу разобраться
Ответ #4 - 16. Сентября 2008 :: 13:05
Печать  
Если известно что группа конечная т.е. папка содержит только элементы то гораздо эффективней
Код
Выбрать все
ТекстЗапроса = "
|SELECT Материалы.Code [Code $Число]
|	   ,Материалы.ID [Материал $Справочник.Материалы]
|FROM $Справочник.Материалы AS Материалы (NOLOCK)
|WHERE Материалы.ParentID = :ЗнПапка";
rc.УстановитьТекстовыйПараметр("ЗнПапка", Родитель);
 


Так же твой запрос будет включать и помеченные на
удаление элементы справочника
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #5 - 18. Сентября 2008 :: 08:46
Печать  
Z1 писал(а) 16. Сентября 2008 :: 13:05:
Если известно что группа конечная т.е. папка содержит только элементы то гораздо эффективней
Код
Выбрать все
ТекстЗапроса = "
|SELECT Материалы.Code [Code $Число]
|	   ,Материалы.ID [Материал $Справочник.Материалы]
|FROM $Справочник.Материалы AS Материалы (NOLOCK)
|WHERE Материалы.ParentID = :ЗнПапка";
rc.УстановитьТекстовыйПараметр("ЗнПапка", Родитель);
 




Твой запрос включает только элементы и группы уровня Родитель.Уровень()+1


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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не могу разобраться
Ответ #6 - 18. Сентября 2008 :: 09:35
Печать  
NFF писал(а) 18. Сентября 2008 :: 08:46:
Твой запрос включает только элементы и группы уровня Родитель.Уровень()+1

Так написано если группа конечная содержит только элементы.
Можно улучшать :и дальше : Если во временной таблице оставить только папки и перерисать условие аналогичное что я написал
( родитель в списке )
Т.к. групп гораздо меньше элементов запрос будет более эфективным.
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #7 - 18. Сентября 2008 :: 11:13
Печать  
Z1 писал(а) 18. Сентября 2008 :: 09:35:
Так написано если группа конечная содержит только элементы.
Можно улучшать :и дальше : Если во временной таблице оставить только папки и перерисать условие аналогичное что я написал
( родитель в списке )
Т.к. групп гораздо меньше элементов запрос будет более эфективным.


Можешь привести пример...
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #8 - 18. Сентября 2008 :: 13:11
Печать  
Есть другая проблема

Есть регистр с измерениями
  Товар
  Склад
Ресурсами
  Количество

Нужно получить ведомость с документами движения а-ля "Ведомость по остаткам" в ТиС, с остатками на измерения и оборотами на документы движения


Пример:

Наименование       НачОст     Приход     Расход    КонОст

Товар1                       0              1               1           0
Документ1                  0              1               0           0
Документ2                  0              0               1           0
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не могу разобраться
Ответ #9 - 18. Сентября 2008 :: 13:24
Печать  
Пример ( несколько искуственный но показывает суть )
Код
Выбрать все
Процедура Сформировать()
	// Входной параметр папка   ВыбТовар ( Справочник.Товары )
	Запрос = СоздатьОбъект("ODBCRecordSet");
	Род = СоздатьОбъект("СписокЗначений");
	Род.ДобавитьЗначение(ВыбТовар);
	Запрос.УложитьСписокОбъектов(Род,"#ПапкаТовары","Товары");
	Запрос.УложитьСписокОбъектов(Род,"#ПапкаРод","Товары");
	ТекстЗапроса = "delete from #ПапкаРод";
	ТЗ = Запрос.ВыполнитьСкалярный(ТекстЗапроса);

	ТекстЗапроса = "INSERT INTO #ПапкаРод   select DISTINCT Спр.ParentID as val,1 as isfolder  from $Справочник.Товары as Спр
	|where Спр.id in ( select val from #ПапкаТовары  )
	|";
	ТЗ = Запрос.ВыполнитьСкалярный(ТекстЗапроса);
//	ТекстЗапроса = "select * from #ПапкаРод";


// Родной запрос
	ТекстЗапроса = "
	|SELECT ID [Тов $Справочник.Товары], Спр.IsFolder from $Справочник.Товары as Спр
	|WHERE  Спр.ParentID in ( select val from  #ПапкаРод)
	|";
	Запрос.Отладка(1);
	ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	ТЗ.ВыбратьСтроку();

КонецПроцедуры
 


Пожелание к разработчикам было бы очень здорово если бы был метод УложитьСписокТолькоПапкиОбъектов (параметры метода
аналогичные )
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не могу разобраться
Ответ #10 - 18. Сентября 2008 :: 13:26
Печать  
Кстати вот и цитата из документации

Цитата:
Для таких случаев у объекта ODBCRecordset есть метод

УложитьСписокОбъектов(Список, Таблица, ВидСправочника) и

УложитьСписокОбъектов13(Список, Таблица)

Список – это список или группа. После  выполнения этого метода появляется таблица с именем Таблица и колонками Val, IsFolder

Однако не стоит злоупотреб##ть этим методом. Анализируя производительность можно увидеть, что этот метод на группах работает медленно и это совершенно очевидно, т.к. группа может содержать огромное число элементов, которые надо переписать во временную таблицу. ГОРАЗДО эффективней получить список подгрупп входящих в выбранную группу и делать условие по принадлежности к родителю, а не по ID
  
Наверх
 
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #11 - 18. Сентября 2008 :: 18:50
Печать  
NFF писал(а) 18. Сентября 2008 :: 13:11:
Есть другая проблема

Есть регистр с измерениями
 Товар
 Склад
Ресурсами
 Количество

Нужно получить ведомость с документами движения а-ля "Ведомость по остаткам" в ТиС, с остатками на измерения и оборотами на документы движения


Пример:

Наименование       НачОст     Приход     Расход    КонОст

Товар1                       0              1               1           0
Документ1                  0              1               0           0
Документ2                  0              0               1           0


Делаю запрос
Код
Выбрать все
ТекстЗапроса = "
|SELECT ОстаткиТМЦОстаткиОбороты.Товар [Товар $Справочник.Номенклатура]
| , ОстаткиТМЦОстаткиОбороты.Склад [Склад $Справочник.Склады]
| , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток [КоличествоНачОст]
| , ОстаткиТМЦОбороты.КоличествоПриход [КоличествоПриход]
| , ОстаткиТМЦОбороты.КоличествоРасход [КоличествоРасход]
| , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток [КоличествоКонОст]
| , RIGHT(ОстаткиТМЦОбороты.ПозицияДокумента,9) [Документ $Документ]
| , ОстаткиТМЦОбороты.ВидДокумента [Документ_вид]
|FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНачала,:ДатаКонца~,Документ,,,(Товар, Склад),Количество) AS ОстаткиТМЦОстаткиОбороты";
 



Получаю результат

Наименование       НачОст     Приход     Расход    КонОст

Товар1                       1              1               1           1
Документ1                  0              1               0           1
Документ2                  1              0               1           0


Куда копать, может сделать $РегистрОстаткиОбороты UNION ALL $РегистрОбороты, не хотелось бы через ТаблицуЗначений собирать.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Не могу разобраться
Ответ #12 - 18. Сентября 2008 :: 20:03
Печать  
А что в результате то не устраивает?
  
Наверх
IP записан
 
NFF
Junior Member
**
Отсутствует



Сообщений: 23
Зарегистрирован: 19. Июня 2008
Re: Не могу разобраться
Ответ #13 - 18. Сентября 2008 :: 20:57
Печать  
leshik писал(а) 18. Сентября 2008 :: 20:03:
А что в результате то не устраивает?


Итоги на Измерение(Товар1) НачОст=1 и КонОст=1, должно быть НачОст=0 и КонОст=0, на документах движения только обороты
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Не могу разобраться
Ответ #14 - 20. Сентября 2008 :: 18:05
Печать  
Пиши запрос без ВТ (используя union all)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать