Имя: Пароль:
1C
1С v8
Нужна помощь с запросом: на каждую запись регистра сведений повторить записи из справочник
,
0 vdeemer
 
25.04.19
10:34
Доброго времени суток!
Помогите, пожалуйста, составить следующий запрос по вводным:
Есть справочники Пользователи и ПоказателиАктивности, регистр КоэффициентыПоказателейАктивностиПользователей (измерения Пользователь и Показатель, ресурс ЗначениеПоказателя).

Нужна выборка записей вида {Пользователь:ПоказательАктивности:ЗначениеПоказателя}, но на каждого пользователя из регистра надо вывести ВСЕ записи из справочника показателей. Если для какого-то показателя активности для данного пользователя нет записи в регистре, то значение показателя = NULL.

Такое возможно сделать запросом?
Спасибо.
1 1Сергей
 
25.04.19
10:35
Обычные левые сеодинения
2 vdeemer
 
25.04.19
10:36
(1) пробовал, не выходит
3 1Сергей
 
25.04.19
10:38
(2) Я думаю наши отношения уже перешли на новый уровень - не стесняйся, показывай запрос
4 vdeemer
 
25.04.19
10:39
ВЫБРАТЬ
    СпрПоказатели.Ссылка
ПОМЕСТИТЬ ВТ_Показатели
ИЗ
    Справочник.ТРК_ПоказателиАктивности КАК СпрПоказатели
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗначенияПоказателей.Показатель,
    ЗначенияПоказателей.Пользователь,
    ЗначенияПоказателей.Коэффициент,
    ВТ_Показатели.Ссылка
ИЗ
    ВТ_Показатели КАК ВТ_Показатели
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПоказателейПоВидамАктивности.СрезПоследних КАК ЗначенияПоказателей
        ПО ВТ_Показатели.Ссылка = ЗначенияПоказателей.Пользователь
5 vdeemer
 
25.04.19
10:39
(3) Ахаха, я уже писал в это время
6 patria0muerte
 
25.04.19
10:39
Сначала перемножь таблицы Пользователи и Показатели, помести во временную, потом левым соединением к ней цепляй регистр
7 1Сергей
 
25.04.19
10:40
(4) так надо к Пользователям соединять всё остальное, если нужны все пользователи
8 vdeemer
 
25.04.19
10:40
(6) тогда вылезут все пользователи, а они мне не нужны
9 patria0muerte
 
25.04.19
10:41
Ну сначала отбери пользователей как тебе надо, потом (46
10 patria0muerte
 
25.04.19
10:41
*Потом (6)
11 vdeemer
 
25.04.19
10:41
на каждого пользователя, который есть в записях регистра, нужно вывести все записи справочника показателей
12 vdeemer
 
25.04.19
10:41
Разве (9) (10) <> (4)?
13 catena
 
25.04.19
10:43
(12)Не равно. Отбери из регистра всех пользователей и скрещивай их со всеми показателями
14 vdeemer
 
25.04.19
10:43
(12) не то, сам понял))
в общем, сначала выбрать РАЗЛИЧНЫЕ пользователи, потом перемножить, потом...
Сейчас попробую
15 vdeemer
 
25.04.19
10:43
(13) ага, (14)
16 patria0muerte
 
25.04.19
10:43
(12) Хм, да. Равно упустил момент, что "на каждого пользователя из регистра". Тогда (4) пойдет вполне
17 vdeemer
 
25.04.19
10:46
(16) не, не подходит. Надо (14)
18 Simod
 
25.04.19
10:55
ВЫБРАТЬ
    СПР_Пользователи.Ссылка КАК Пользователь,
    СПР_ПоказателиАктивности.Ссылка КАК Показатель,
    РС_КоэффициентыПоказателейАктивностиПользователей.ЗначениеПоказателя КАК Значение
ИЗ
    Справочник.Пользователи КАК СПР_Пользователи
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПоказателиАктивности КАК СПР_ПоказателиАктивности
        ПО Истина
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КоэффициентыПоказателейАктивностиПользователей КАК РС_КоэффициентыПоказателейАктивностиПользователей
        ПО СПР_Пользователи.Ссылка = РС_КоэффициентыПоказателейАктивностиПользователей.Пользователь
        И СПР_ПоказателиАктивности.Ссылка = РС_КоэффициентыПоказателейАктивностиПользователей.Показатель
19 vdeemer
 
25.04.19
10:57
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗначенияПоказателейПоВидамАктивности.Пользователь
ПОМЕСТИТЬ ВТ_Пользователи
ИЗ
    РегистрСведений.ЗначенияПоказателейПоВидамАктивности.СрезПоследних(&ДатаСреза, ) КАК ЗначенияПоказателейПоВидамАктивности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Пользователи.Пользователь,
    ТРК_ПоказателиАктивности.Ссылка КАК Показатель
ПОМЕСТИТЬ ВТ_Умножение
ИЗ
    ВТ_Пользователи КАК ВТ_Пользователи,
    Справочник.ТРК_ПоказателиАктивности КАК ТРК_ПоказателиАктивности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Умножение.Пользователь КАК Пользователь,
    ВТ_Умножение.Показатель КАК Показатель,
    ЕСТЬNULL(ЗначенияПоказателей.Коэффициент, 0) КАК Коэффициент
ИЗ
    ВТ_Умножение КАК ВТ_Умножение
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПоказателейПоВидамАктивности.СрезПоследних(&ДатаСреза, ) КАК ЗначенияПоказателей
        ПО ВТ_Умножение.Пользователь= ЗначенияПоказателей.Пользователь
            И ВТ_Умножение.Показатель = ЗначенияПоказателей.Показатель

УПОРЯДОЧИТЬ ПО
    Пользователь,
    Показатель
20 Simod
 
25.04.19
10:57
Сорри, не увидел, что по пользователя из регистра. Но думаю общая идея понятна.
21 vdeemer
 
25.04.19
11:00
(20) ага, проверяю
так-то (19) дает то, что надо
22 vdeemer
 
25.04.19
11:06
(20) работает, спасибо
Всем спасибо, (18) и (19) - рабочий запрос