Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) При устновке фильтра по реквизиту справочника в выборку не попадают группы (число прочтений - 4766 )
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
При устновке фильтра по реквизиту справочника в выборку не попадают группы
06. Октября 2011 :: 06:45
Печать  
простой запрос по справочнику скидки с фильтром по контрагенту и по номенклатуре

Код
Выбрать все
	ТекстЗапроса = "
		|SELECT Скидки.ID [Скидки $Справочник.Скидки]
		|	, $Скидки.Контрагент [Контрагент $Справочник.Контрагенты]
		|	, $Скидки.Номенклатура [Номенклатура $Справочник.Номенклатура]
		|	, $Скидки.ДатаНачала ДатаНачала
		|	, $Скидки.ДатаОкончания ДатаОкончания
		|	, $Скидки.Процент Процент
		|FROM $Справочник.Скидки AS Скидки
		|WHERE Скидки.IsMark=0 ";
		Если сзТМЦ.РазмерСписка()>0 Тогда
			ТекстЗапроса = ТекстЗапроса +
			"
			|and $Скидки.Номенклатура IN (SELECT Val FROM #ГруппаН)";
		КонецЕсли;
		Если сзКонтр3.РазмерСписка()>0 Тогда
			ТекстЗапроса = ТекстЗапроса +
			"
			|and $Скидки.Контрагент IN (SELECT Val FROM #ГруппаК)";
		КонецЕсли;
		ТекстЗапроса = ТекстЗапроса +
		"
		|GROUP BY Скидки.ID
		|	, $Скидки.Контрагент
		|	, $Скидки.Номенклатура
		|	, $Скидки.ДатаНачала
		|	, $Скидки.ДатаОкончания
		|	, $Скидки.Процент
		|ORDER BY $Скидки.Номенклатура
		|	, $Скидки.Контрагент
		|";
	рс.УложитьСписокОбъектов(сзТМЦ, "#ГруппаН", "Номенклатура");
	рс.УложитьСписокОбъектов(сзКонтр3, "#ГруппаК", "Контрагенты");
 



Если я устанавливаю фильтр по номенклатуре, к примеру задав в список сзТМЦ папку 1-го уровня, то в результат попадут только скидки установленные на элементы справочника номенклатуры (входящие в эту группу) а скидки установленные на группы номенклатуры (более низкого уровня) вообще не попадают в результирующую таблицу.
Если я вообще не накладываю фильтр по номенклатуре , а только по контрагенту, то в отчет попадают все как надо.

Подскажите как решить проблему?

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #1 - 06. Октября 2011 :: 07:10
Печать  
Я не помню поведение метода УложитьСписокОбъектов() - может быть он только элементы включает, пропуская группы?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #2 - 06. Октября 2011 :: 07:20
Печать  
Проверить легко
Вместо основного запроса выполните запрос и посмотреть результат
Код
Выбрать все
ТекстЗапроса = "SELECT Val [Контрагент $Справочник.Контрагенты],* FROM #ГруппаК";
 

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


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #3 - 06. Октября 2011 :: 07:20
Печать  
УложитьСписокОбъектов:
Если указан вид ВидЭлементов - идентификатор иерархического справочника, то таблица будет содержать элементы, иерархически принадлежащие группам переданным в списке. (Подобно оператору "в" стандартного языка запросов 1С.)

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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #4 - 06. Октября 2011 :: 07:21
Печать  
Satans Claws писал(а) 06. Октября 2011 :: 07:10:
Я не помню поведение метода УложитьСписокОбъектов() - может быть он только элементы включает, пропуская группы?



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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #5 - 06. Октября 2011 :: 07:23
Печать  
dimm73 писал(а) 06. Октября 2011 :: 07:21:
Satans Claws писал(а) 06. Октября 2011 :: 07:10:
Я не помню поведение метода УложитьСписокОбъектов() - может быть он только элементы включает, пропуская группы?



Так и есть, но как в моем случае решить проблему ?

самому через insert  добавлять во временную таблицу
элементы=группа

PS даже немного сложнее : вручгную все эти папки и подпапки.

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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #6 - 06. Октября 2011 :: 07:24
Печать  
Z1 писал(а) 06. Октября 2011 :: 07:23:
dimm73 писал(а) 06. Октября 2011 :: 07:21:
Satans Claws писал(а) 06. Октября 2011 :: 07:10:
Я не помню поведение метода УложитьСписокОбъектов() - может быть он только элементы включает, пропуская группы?



Так и есть, но как в моем случае решить проблему ?

самому через insert  добавлять во временную таблицу
элементы=группа



Если это не сложно выложите пример такой реализации , я раньше так не пробовал
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #7 - 06. Октября 2011 :: 07:33
Печать  
(6) ВыполнитьSQL_ИзТЗ
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #8 - 06. Октября 2011 :: 07:33
Печать  
dimm73 писал(а) 06. Октября 2011 :: 07:24:
выложите пример такой реализации

В AccountsRecordset есть метод УложитьСписокГрупп().
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #9 - 06. Октября 2011 :: 07:50
Печать  
dimm73 писал(а) 06. Октября 2011 :: 07:24:
Z1 писал(а) 06. Октября 2011 :: 07:23:
dimm73 писал(а) 06. Октября 2011 :: 07:21:
Satans Claws писал(а) 06. Октября 2011 :: 07:10:
Я не помню поведение метода УложитьСписокОбъектов() - может быть он только элементы включает, пропуская группы?



Так и есть, но как в моем случае решить проблему ?

самому через insert  добавлять во временную таблицу
элементы=группа



Если это не сложно выложите пример такой реализации , я раньше так не пробовал

вот работающий пример Спсок1 меняешь на свой и справочник тоже меняешь на свой
Код
Выбрать все
Процедура Сформировать1()
	Локал_ПрямойЗапрос = СоздатьОбъект("ODBCRecordSet");
	Список1 = СоздатьОбъект("СписокЗначений");
	Список1.ДобавитьЗначение(ГлобСкладЧужой_Папка,"");
	Локал_ПрямойЗапрос.УложитьСписокОбъектов(Список1, "#Склады", "Склады");
	Разм1 = Список1.РазмерСписка();
	Спр1 = СоздатьОбъект("Справочник.Склады");
	ТекстрЗапроса = "insert #Склады  values(:Зн_папка,1)";
	Для  Инд1 = 1 по Разм1 Цикл
		ТекЗн = Список1.ПолучитьЗначение(Инд1,);
		Если ТекЗн.ЭтоГруппа() = 0 Тогда Продолжить; КонецЕсли;
		Спр1.ИспользоватьРодителя(ТекЗн);
		Спр1.ВыбратьЭлементы();
		Локал_ПрямойЗапрос.УстановитьТекстовыйПараметр("Зн_папка", ТекЗн);
		Локал_ПрямойЗапрос.ВыполнитьСкалярный(ТекстрЗапроса);
		Пока Спр1.ПолучитьЭлемент() = 1 Цикл
			Если Спр1.ЭтоГруппа() = 0 Тогда Продолжить; КонецЕсли;
			Локал_ПрямойЗапрос.УстановитьТекстовыйПараметр("Зн_папка", Спр1.ТекущийЭлемент() );
			Локал_ПрямойЗапрос.ВыполнитьСкалярный(ТекстрЗапроса);
		КонецЦикла;
	КонецЦикла;

	ТекстЗапроса = "SELECT Val [Склад $Справочник.Склады],* FROM #Склады";
	ТЗ = Локал_ПрямойЗапрос.ВыполнитьИнструкцию(ТекстЗапроса);
	Сообщить("Всего строк = " + ТЗ.КоличествоСтрок() );
	ТЗ.ВыбратьСтроку();
КонецПроцедуры

 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #10 - 06. Октября 2011 :: 09:50
Печать  
val писал(а) 06. Октября 2011 :: 07:33:
(6) ВыполнитьSQL_ИзТЗ

а можешь пример привести ???
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #11 - 06. Октября 2011 :: 10:16
Печать  
(10) А из документации по ODBC пример не устраивает?
Никто не мешает автору самому формировать всю временную таблицу с элементами и группами через ВыполнитьSQL_ИзТЗ.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #12 - 06. Октября 2011 :: 10:26
Печать  
вопрос только, как ты эту ТЗ будешь заполнять.
Z1 думаю, об этом спрашивает.

ЗЫ: а так, проще группы прямым запросом поиметь, тут на форуме было решение.. и с хранимкой и так, куча джоинов.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #13 - 06. Октября 2011 :: 10:53
Печать  
Eprst писал(а) 06. Октября 2011 :: 10:26:
вопрос только, как ты эту ТЗ будешь заполнять.
Z1 думаю, об этом спрашивает.

ЗЫ: а так, проще группы прямым запросом поиметь, тут на форуме было решение.. и с хранимкой и так, куча джоинов.

где то год назад предлагал trad либо изменить метод УложитьСписокОбъектов либо написать новый метод чтобы можно было укладывать в во временную таблицу ( у меня не хватило аргументов чтобы trad изменил 1с++ )
а) только элементы
б) только папки
в) и то и другое.

Джойнов куча не нужно все пишеться также как и уложитьсписок через временные переменные на  t-sql.

Преимущества такого (пока несуществующего) способа перед #9
а) скорость б) наглядность в) меньше ошибок т.к. текст короче

Могу найти ту ветку.

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


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: При устновке фильтра по реквизиту справочника в выборку не попадают группы
Ответ #14 - 06. Октября 2011 :: 11:14
Печать  
(12) Навскидку 2 способа:
1. Формировать ТЗ стандартными способами 1С: ВыбратьЭлементы.
2. Комб. способ:
а) УложитьСписокОбъектов() - получаем список элеметов во врем. табл.
б) Select из врем табл - получаем список элеметов в ТЗ
в) добавляем в ТЗ родителей этих элементов станд.способами.
г) ВыполнитьSQL_ИзТЗ.

1-й способ, конечно, легче. Подмигивание
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать