Имя: Пароль:
1C
1С v8
Запросы в иерархическом справочнике
0 Skyrazor
 
07.06.12
22:12
1. Есть иерархический справочник Сотрудники. В нём группы со стандартными реквизитами Наименование и Код. Мне нужно, чтобы при входе в какую то группу с элементами, расчитывались кое-какие показатели и записывались в форму. Есть код:

Цех = ЭлементыФормы.СправочникСписок.ТекущиеДанные.Родитель;
Запрос = Новый Запрос;Запрос.УстановитьПараметр("Цех", Цех);
Запрос.Текст = "ВЫБРАТЬ СРЕДНЕЕ(Возраст) КАК СреднийВозраст,
|СРЕДНЕЕ(СтажРаботы) как СреднийСтажРаботы,
|СРЕДНЕЕ(ДниБолезней) как СреднееДниБолезней
|ИЗ Справочник.Сотрудники как Сотрудники";
Выборка = Запрос.Выполнить().Выбрать();
ЭлементыФормы.СрВозрЦех.Заголовок = Строка(Выборка.СреднийВозраст);
ЭлементыФормы.СрСтажЦех.Заголовок = Строка(Выборка.СреднийСтажРаботы);
ЭлементыФормы.ДниБолезней.Заголовок = Строка(Выборка.СреднееДниБолезней);

Как мне сформировать запрос полностью, добавить условие ГДЕ или ещё что-то, чтобы он считал то, что мне нужно конктретно по элементам той группы, в которой я нахожусь. В форме списка есть надпись "Цех", которой присваивается значение той группы, в которой я нахожусь. Определяется она таким же образом как и в начале этого кода.

Фото: http://skyrazor.ru/uploads/i/1339088588.png

2. И ещё есть стандартный макет с выводом ФИО сотрудников и их зарплат. Мне нужно сделать так, чтобы выводились только сотрудники, у которых Зарплата больше 15000. Если без "группировки" по группам, то можно сделать такой запрос:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ Наименование, Зарплата
|ИЗ  Справочник.Сотрудники
|ГДЕ Зарплата > 15000";
Выборка = Запрос.Выполнить().Выбрать();

Он выводит список всех сотрудников сразу, но с проверкой условия. А если так:

Выборка = Справочники.Сотрудники.ВыбратьИерархически();

То выводится как нужно, но естественно со всеми зарплатами.
Фото (со вторым запросом): http://skyrazor.ru/uploads/i/1339088639.png
1 DrShad
 
07.06.12
22:16
лажа какая-то, что за нетленка на скринах?
2 experimentator76
 
07.06.12
22:29
(1) это 8.1
3 experimentator76
 
07.06.12
22:29
восьмерочные клюшки)
4 andrewks
 
07.06.12
22:47
(3) не, это не клюшки. клюшки покрасивее будут
5 andrewks
 
07.06.12
22:49
где Сотрудники.Ссылка в иерархии &ВыбГруппа
6 hhhh
 
07.06.12
22:49
(0)

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
7 andrewks
 
07.06.12
22:51
(0) твой сайт не пашет нифига. юзай нормальный картинкохостинг
8 ЛЮС
 
07.06.12
23:00
(0) А что это за страхоужасная конфигурация?
   1) так и используй условие, что-то типа ГДЕ Ссылка В ИЕРАРХИИ (&Цех)
   2) А не пробовал в исходный запрос условие добавить, а не свой писать?

(7) у меня пашет
9 Skyrazor
 
07.06.12
23:34
Так заработало:

Запрос.Текст = "ВЫБРАТЬ СРЕДНЕЕ(Возраст) КАК СреднийВозраст,
|СРЕДНЕЕ(СтажРаботы) как СреднийСтажРаботы,
|СРЕДНЕЕ(ДниБолезней) как СреднееДниБолезней
|ИЗ Справочник.Сотрудники как Сотрудники
|ГДЕ Сотрудники.Ссылка В ИЕРАРХИИ(&Цех)";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();

Спасибо! Осталось по второму вопросу. Буду рад помощи.
Насчет картинок. Первая: http://i37.fastpic.ru/big/2012/0607/10/33eb689c441b1b1892d2439686abf210.png
Вторая: http://i37.fastpic.ru/big/2012/0607/30/86758967c88c3fd560b14594011d8b30.png
Первую решили, правда если я не в одной из групп, а в корне - то рассчитываются показатели по всем существующим группам. Но это не так принципиально.

И как правильно сравнить реквизит Пол типа ПеречислениеСсылка.Пол с нужным значением (их всего два: Мужской и Женский)? данный вариант не работает:

Запрос.Текст = "ВЫБРАТЬ Пол, СРЕДНЕЕ(Зарплата) КАК СредняяЗарплатаМ
|ИЗ Справочник.Сотрудники как Сотрудники
|ГДЕ Сотрудники.Пол = Мужской И Сотрудники.Ссылка В ИЕРАРХИИ(&Цех)";
10 DrShad
 
07.06.12
23:35
продолжайте наблюдения!
11 Skyrazor
 
08.06.12
07:20
(10) Что вы имеете в виду?

Проблему с полом решил:
|ГДЕ Сотрудники.Пол = Значение(Перечисление.Пол.Мужской) И Сотрудники.Ссылка В ИЕРАРХИИ(&Цех)";

Остался запрос в вопросе №2
12 Zmich
 
08.06.12
07:33
(11).  Добавь во 2м запросе
|АВТОУПОРЯДОЧИВАНИЕ
13 Skyrazor
 
08.06.12
07:56
(12) Тоже самое - весь список сразу, только порядок меняется. Может чтото нужно ещё в макет добавить? Пока выводится так:

Пока Выборка.Следующий() Цикл
//    Если Выборка.ЭтоГруппа Тогда
//        Группа.Параметры.Заполнить(Выборка);
//        ТабДок.Вывести(Группа);
//    Иначе
       Элемент.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Элемент);
   //КонецЕсли;
КонецЦикла;

Закомментированное - для вывода через
Выборка = Справочники.Сотрудники.ВыбратьИерархически();
но без фильтра по значению Зарплата
14 Skyrazor
 
09.06.12
11:35
Всё, вопрос можно считать закрытым. Помогавшим спасибо!