Имя: Пароль:
1C
1С v8
как в рез.запроса избавиться от папок справочника
,
0 yu_70
 
26.04.12
16:15
как в рез.запроса избавиться от папок справочника,в которых нет элементов (запрос используется в форме списка справочника для формирования динамического списка)

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

ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.РасширенноеНаименование,
   СправочникНоменклатура.ЕдиницаИзмерения,
   СправочникНоменклатура.СчетТМЦ,
   СправочникНоменклатура.ОтветственныйЗаПоставку,
   СправочникНоменклатура.ТехническаяХарактеристика,
   СправочникНоменклатура.Описание,
   СправочникНоменклатура.ФлагЗапретаНовых,
   СправочникНоменклатура.ТипМаркаРазмер,
   СправочникНоменклатура.ГОСТ,
   СправочникНоменклатура.СтоимостьЕдДоллар,
   СправочникНоменклатура.Примечание
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
   СправочникНоменклатура.ЕдиницаИзмерения = &ЕдиницаИзмерения
1 Maxus43
 
26.04.12
16:15
ГДЕ
   НЕ СправочникНоменклатура.ЭтоГруппа
2 Maxus43
 
26.04.12
16:16
а не...
3 _Demos_
 
26.04.12
16:16
ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.РасширенноеНаименование,
   СправочникНоменклатура.ЕдиницаИзмерения,
   СправочникНоменклатура.СчетТМЦ,
   СправочникНоменклатура.ОтветственныйЗаПоставку,
   СправочникНоменклатура.ТехническаяХарактеристика,
   СправочникНоменклатура.Описание,
   СправочникНоменклатура.ФлагЗапретаНовых,
   СправочникНоменклатура.ТипМаркаРазмер,
   СправочникНоменклатура.ГОСТ,
   СправочникНоменклатура.СтоимостьЕдДоллар,
   СправочникНоменклатура.Примечание
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
   СправочникНоменклатура.ЕдиницаИзмерения = &ЕдиницаИзмерения
   И НЕ СправочникНоменклатура.ЭтоГруппа
итоги по
СправочникНоменклатура Иерархия
4 Ахиллес
 
26.04.12
16:17
(0)Забей.
5 _Demos_
 
26.04.12
16:17
отепятка последняя строка
ССылка Иерархия
6 yu_70
 
26.04.12
16:20
(3) для динам. списков конструкция итоги по не работает
7 _Demos_
 
26.04.12
16:21
(6) ну выгрузи в таб значений линейно и отобрази его
8 yu_70
 
26.04.12
16:24
(1) вы не поняли... в рез. (1) получаем только элементы... А мне нужно в иерархии.
9 Ахиллес
 
26.04.12
16:28
Пока, что мой совет самый правильный :-)
10 palpetrovich
 
26.04.12
16:31
пора наверное разорабам вводить новое свойство "Дети"  :)
11 le_
 
26.04.12
16:31
(0) А если отбором Ссылко не в СписокПустыхГрупп?
12 Rizhij_Nikitos
 
26.04.12
16:33
Тебе надо список пустых групп выкинуть, а потом данные делать не ВспискеГруппы.
13 yu_70
 
26.04.12
16:36
(12) похоже на то...
14 yu_70
 
26.04.12
16:38
(12) не понятно как пустые группы выцепить- перебирать - долго, а выгрузка даст только элементы
15 Vladal
 
26.04.12
16:45
Соедини две таблицы - полный и с пустыми. Выбери непустые.
16 Ахиллес
 
26.04.12
16:45
Не так. В подзапрос (0), получаем список элементов, а в запросе Иерархию.
17 daim-1
 
26.04.12
16:45
Условие в запросе, по идее должно помочь:

|ГДЕ НЕ СправочникНоменклатура.Ссылка В (ВЫБРАТЬ Группы.Ссылка
   |ИЗ
   |    Справочник.Номенклатура КАК Группы
   |ГДЕ
   |    (НЕ Группы.Ссылка В
   |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
   |                    Номенклатура.Родитель
   |                ИЗ
   |                    Справочник.Номенклатура КАК Номенклатура
   |                ГДЕ
   |                    Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.СтатьиБюджета.ПустаяСсылка)))
   |    И Группы.ЭтоГруппа

Типа того
18 aleks-id
 
26.04.12
16:45
вложенный запрос. в нем выбрать группы и левым к ним прицепить элементы по родителю с функцией КОЛИЧЕСТВО, потом отобрать из вложенного запроса по условию > 0
19 daim-1
 
26.04.12
16:46
Пардон, вместо Справочник.СтатьиБюджета.ПустаяСсылка соответственно номенклатура.
Была у меня похожая задача избавиться от пустых групп, этот запрос все корректно вычислял.
20 palpetrovich
 
26.04.12
16:51
в порядке бреда не прокатит?
Выбор Когда СправочникНоменклатура.Родитель = СправочникНоменклатура.Ссылка.Родитель Тогда
   СправочникНоменклатура.Родитель
   Иначе "" КОНЕЦ КАК Родитель
21 palpetrovich
 
26.04.12
16:55
+20 ща проверил, пустые не попадают :)
22 Rizhij_Nikitos
 
26.04.12
16:56
На основе твоего запроса, дописал вручную, как должно выглядетьЮ в результате даст все элементы и их группы которые не пустые, пустые все выкинет.
ВЫБРАТЬ
   СправочникНоменклатура.Ссылка КАК ССЫЛКА,
   СправочникНоменклатура.ПометкаУдаления,
   СправочникНоменклатура.Предопределенный,
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.ЭтоГруппа,
   СправочникНоменклатура.Код,
   СправочникНоменклатура.Наименование,
   СправочникНоменклатура.РасширенноеНаименование,
   СправочникНоменклатура.ЕдиницаИзмерения,
   СправочникНоменклатура.СчетТМЦ,
   СправочникНоменклатура.ОтветственныйЗаПоставку,
   СправочникНоменклатура.ТехническаяХарактеристика,
   СправочникНоменклатура.Описание,
   СправочникНоменклатура.ФлагЗапретаНовых,
   СправочникНоменклатура.ТипМаркаРазмер,
   СправочникНоменклатура.ГОСТ,
   СправочникНоменклатура.СтоимостьЕдДоллар,
   СправочникНоменклатура.Примечание
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
   СправочникНоменклатура.ЭтоГруппа= ЛОЖЬ
ИТОГО
  ССЫЛКА ТОЛЬКО ИЕРАРХИЯ
23 le_
 
26.04.12
17:00
(0) А что, если пользователь захочет добавить элемент в группу, которой не видно? )
24 daim-1
 
26.04.12
17:01
(22) Вроде бы ясно сказано, что динамический список на основе запроса. При чем тут, казалось бы, "ИТОГИ ПО"?
25 Rizhij_Nikitos
 
26.04.12
17:03
(24) смотри мы выберем все элементы, а потом сделаем свертку по их группа этой иерархией) Короче выберутся все элементы и сядут в свои группы, а те, что пустые их не будет. можешь проверить.
26 yu_70
 
26.04.12
17:03
(23)- нет прв у этих пользователей на добавление
27 Rizhij_Nikitos
 
26.04.12
17:03
(26) мой работает?
28 daim-1
 
26.04.12
17:05
(25) ээээ.. ну как бы в динамическом списке нельзя использовать ИТОГИ ПО, если речь идет о управляемых формах конечно.
29 yu_70
 
26.04.12
17:05
(17) -не работает... по ходу Это для случая, если в группе изначально нет элементов.... а у меня их нет в результате наложения фильтра в запросе....
30 yu_70
 
26.04.12
17:05
(28) - 8.2. упр. формы
31 le_
 
26.04.12
17:05
Сразу запросом не получится.
Нужно отбор устанавливать в списке.
32 le_
 
26.04.12
17:08
И для отбора подойдет запрос (22).
33 palpetrovich
 
26.04.12
17:10
(29) упс :)
34 le_
 
26.04.12
17:15
Можно такой запрос еще использовать для отбора ссылка не в списке:
ВЫБРАТЬ
   Контрагенты.Ссылка,
   Контрагенты.ЭтоГруппа,
   Контрагенты.Родитель
ПОМЕСТИТЬ СправочникКонтрагентов
ИЗ
   Справочник.Контрагенты КАК Контрагенты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СправочникКонтрагентов.Ссылка
ИЗ
   СправочникКонтрагентов КАК СправочникКонтрагентов
ГДЕ
   СправочникКонтрагентов.ЭтоГруппа
   И НЕ СправочникКонтрагентов.Ссылка В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   СправочникКонтрагентов.Родитель
               ИЗ
                   СправочникКонтрагентов КАК СправочникКонтрагентов
               ГДЕ
                   НЕ СправочникКонтрагентов.ЭтоГруппа
                   И НЕ СправочникКонтрагентов.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
       
               ОБЪЕДИНИТЬ ВСЕ
       
               ВЫБРАТЬ РАЗЛИЧНЫЕ
                   СправочникКонтрагентов.Родитель.Родитель
               ИЗ
                   СправочникКонтрагентов КАК СправочникКонтрагентов
               ГДЕ
                   НЕ СправочникКонтрагентов.ЭтоГруппа
                   И НЕ СправочникКонтрагентов.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
       
               ОБЪЕДИНИТЬ ВСЕ
       
               ВЫБРАТЬ РАЗЛИЧНЫЕ
                   СправочникКонтрагентов.Родитель.Родитель.Родитель
               ИЗ
                   СправочникКонтрагентов КАК СправочникКонтрагентов
               ГДЕ
                   НЕ СправочникКонтрагентов.ЭтоГруппа
                   И НЕ СправочникКонтрагентов.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка))
(для определенного количества уровней)
35 Дикообразко
 
26.04.12
17:16
ВЫБРАТЬ РАЗЛИЧНЫЕ
  Спр.Родитель
ПОМЕСТИТЬ ВТ_ИспользуемыеГруппы
ИЗ Справочник.ИмяСправочника КАК Спр
ГДЕ НЕ Спр.ЭтоГруппа И Спр.Родитель <> Значение(Справочник.ИмяСправочника.ПустаяСсылка)
;
ВЫБРАТЬ
 Спр.Ссылка
ПОМЕСТИТЬ ВТ_ИсключаемыеГруппы
ИЗ Справочник.ИмяСправочника КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИспользуемыеГруппы КАК ИспользуемыеГруппы
ПО Спр.Ссылка = ИспользуемыеГруппы.Родитель
ГДЕ Спр.ЭтоГруппа
И ИспользуемыеГруппы.Родитель ЕСТЬ NULL
;
Выбрать
 Спр.Ссылка
ИЗ Справочник.ИмяСправочника КАК Спр
ГДЕ НЕ Спр.Ссылка В (Выбрать ИсклГруппы.Ссылка ИЗ ВТ_ИспользуемыеГруппы КАК ИсклГруппы )
36 daim-1
 
26.04.12
17:18
А если в (17) добавить условие по единице?

   |ГДЕ НЕ СправочникНоменклатура.Ссылка В (ВЫБРАТЬ Группы.Ссылка
   |ИЗ
   |    Справочник.Номенклатура КАК Группы
   |ГДЕ
   |    (НЕ Группы.Ссылка В
   |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
   |                    Номенклатура.Родитель
   |                ИЗ
   |                    Справочник.Номенклатура КАК Номенклатура
   |                ГДЕ
   |                    Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И Не Номенклатура.ЭтоГруппа) И Номенклатура.ЕдиницаИзмерения = &единицаИзмерения)
   |    И Группы.ЭтоГруппа
37 palpetrovich
 
26.04.12
17:20
уже офтопик, забано, почему так пустые группы попадают в выборку
ВЫБРАТЬ
   Выбор Когда    СправочникНоменклатура.Родитель = СправочникНоменклатура.Ссылка.Родитель Тогда
       СправочникНоменклатура.Родитель
   КОНЕЦ КАК Родитель,
   СправочникНоменклатура.Ссылка
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
СГРУППИРОВАТЬ ПО
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.Ссылка
   
// а так - нет?     ...мистика :)
ВЫБРАТЬ
   СправочникНоменклатура.Ссылка,
   Выбор Когда    СправочникНоменклатура.Родитель = СправочникНоменклатура.Ссылка.Родитель Тогда
       СправочникНоменклатура.Родитель
   КОНЕЦ КАК Родитель
ИЗ
   Справочник.Номенклатура КАК СправочникНоменклатура
СГРУППИРОВАТЬ ПО
   СправочникНоменклатура.Родитель,
   СправочникНоменклатура.Ссылка
38 Дикообразко
 
26.04.12
17:24
+(35) только в последнем подзапросе вложенный лучше на соединение заменить
39 yu_70
 
26.04.12
17:48
(36)- не сработало
40 yu_70
 
26.04.12
17:55
(35) я правильно понял? запрос для исключения групп справочника, в которых нет элементов ИЗНАЧАЛЬНО в объекте базы данных? я его не успел проверить , но похоже , что так....Если так, то это не то что мне нужно.
41 Дикообразко
 
26.04.12
17:59
(40) ну переделай как надо,
делов то
42 daim-1
 
26.04.12
18:01
(39) Странно, а конкретнее что именно не так?
43 izekia
 
26.04.12
18:05
(0) нужно вывести все без пустых групп?
44 yu_70
 
26.04.12
18:13
(43) изначально в справочнике (в базе данных) есть элементы во всех группах. После наложения условия в запросе - в результате запроса есть как группы , с элементами попавшими в фильтр, так и группы, в которых не было ни одного подходящего элемента. вот от этих групп (а их много) надо избавиться на уровне результата запроса.
45 izekia
 
26.04.12
18:18
а тебе родители всех уровней непустые нужны?
46 izekia
 
26.04.12
18:23
ну то есть Родитель1->Родитель2->Элемент
Родитель1 тебе тоже нужен, и вообще сколько уровней в справочнике?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс