Имя: Пароль:
1C
1С v8
Отбор по регистру сведений
0 Maikroft
 
27.02.18
19:25
Добрый день.
В общем, есть регистр сведений. В нем есть измерение - Вид Тарифа и есть ресурс - тариф. Вопрос такой: можно ли сделать выборку по 4 измерениям? Я написал запрос (ниже), он выводит все корректно, но если одного измерения нет в регистре (то есть, к примеру, тарифа сверх резерва просто не предусмотрено по договору), то запрос не выдает ничего. Помогите? )

ВЫБРАТЬ
    ЕСТЬNULL(ТарифEUR.Тариф, 0) КАК ТарифEUR,
    ЕСТЬNULL(ТарифFIN.Тариф, 0) КАК ТарифFIN,
    ЕСТЬNULL(ТарифСверхРезерваEUR.Тариф, 0) КАК ТарифСверхРезерваEUR,
    ЕСТЬNULL(ТарифСверхРезерваFIN.Тариф, 0) КАК ТарифСверхРезерваFIN,
ИЗ
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.ТарифEUR)) КАК ТарифEUR,
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.ТарифFIN)) КАК ТарифFIN,
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.ТарифСверхРезерваEUR)) КАК ТарифСверхРезерваEUR,
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.ТарифСверхРезерваFIN)) КАК ТарифСверхРезерваFIN,
СГРУППИРОВАТЬ ПО
    ЕСТЬNULL(ТарифEUR.Тариф, 0),
    ЕСТЬNULL(ТарифFIN.Тариф, 0),
    ЕСТЬNULL(ТарифСверхРезерваEUR.Тариф, 0),
    ЕСТЬNULL(ТарифСверхРезерваFIN.Тариф, 0)
1 Йохохо
 
27.02.18
19:35
срочно перепиши пока начальники не видели
2 Maikroft
 
27.02.18
19:39
Да здесь нечего смотреть, стандарт.)
3 Йохохо
 
27.02.18
19:40
(2) корпоративный?)
4 Maikroft
 
27.02.18
19:41
Хе-хе, нет, тарифный, скорее.)
5 Волшебник
 
27.02.18
19:42
Вы бы хоть уточнили соединение между таблицами.
6 Йохохо
 
27.02.18
19:49
(4) получи срез столбцом, а потом разбери в строку, через выбор когда объединить. Если принципиально запросом строку получить
7 Maikroft
 
27.02.18
20:28
Так это одна таблица, точнее, один регистр сведений.
Мне не принципиально, в строку или нет, просто необходимо выбрать все ресурсы, по которым есть данные. Но в том случае, если данных нет, запрос не выбирает ни один ресурс.(
Я уже по разному пробовал, все одно.
8 Йохохо
 
27.02.18
20:33
(7) в запросе у тебя 4 обращения и потом декартово произведение, волосы дыбом должны колоситься, сделай 1 срез, и 4 поля выбор когда и потом навесь максимум
9 Волшебник
 
27.02.18
20:36
(7) Ты пойми, что https://ru.wikipedia.org/wiki/Прямое_произведение это пиздец для СУБД
10 Maikroft
 
27.02.18
20:57
Спасибо за совет, сейчас попробую сделать один срез, а остальные поля выбором.
11 Maikroft
 
27.02.18
22:11
Дрянь.
Все равно, если нет записи в регистре (по РезервFIN, к примеру) ставит NULL

ВЫБРАТЬ
    СУММА(ВЫБОР
            КОГДА ТарифнаяСеткаСрезПоследних.ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервEUR)
                ТОГДА ТарифнаяСеткаСрезПоследних.Тариф
            ИНАЧЕ 0
        КОНЕЦ) КАК РезервEUR,
    СУММА(ВЫБОР
            КОГДА ТарифнаяСеткаСрезПоследних.ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервFIN)
                ТОГДА ТарифнаяСеткаСрезПоследних.Тариф
            ИНАЧЕ NULL
        КОНЕЦ) КАК РезервFIN
ИЗ
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ) КАК ТарифнаяСеткаСрезПоследних
ГДЕ
    И ТарифнаяСеткаСрезПоследних.Период = &Период
12 Maikroft
 
27.02.18
22:12
ИНАЧЕ NULL пробовал менять на все подряд, не выходит.)
13 Малыш Джон
 
27.02.18
22:26
ВЫБРАТЬ
  ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервEUR) КАК ВидТарифа
ПОМЕСТИТЬ ВТ_ВидыТарифов
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
  ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервFIN);

ВЫБРАТЬ
  ТарифнаяСеткаСрезПоследних.Тариф КАК Тариф,
  ТарифнаяСеткаСрезПоследних.ВидТарифа КАК ВидТарифа
ПОМЕСТИТЬ ВТ_ДанныеСреза
ИЗ РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ВидТарифа В (ВЫБРАТЬ ВТ_ВидыТарифов.ВидТарифа ИЗ ВТ_ВидыТарифов КАК ВТ_ВидыТарифов ) КАК ТарифнаяСеткаСрезПоследних;

ВЫБРАТЬ
  ВТ_ВидыТарифов.ВидТарифа,
  ЕСТЬNULL(ВТ_ДанныеСреза.Тариф,0) КАК Тариф
ИЗ ВТ_ВидыТарифов КАК ВТ_ВидыТарифов  
  ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДанныеСреза КАК ВТ_ДанныеСреза
    ПО ВТ_ВидыТарифов .ВидТарифа=ВТ_ДанныеСреза.ВидТарифа
14 Малыш Джон
 
27.02.18
22:28
+(13) правда, хз, это имелось в виду или нет
15 Волшебник
 
27.02.18
22:32
(14) пишется "иметь ввиду"
16 Maikroft
 
27.02.18
22:39
Именно так.
То есть через виртуальные таблицы все же это делается... Я думал, можно как-то обойтись без них.
Спасибо большое.

P.S. В запросе ) пропущена в 11 строке (это я для тех, кто вдруг на тему набредет).
17 Малыш Джон
 
27.02.18
22:39
(15) это устойчивое выражение, так закрепилось в языке:
"иметь в виду"

http://gramatik.ru/vvidu-ili-v-vidu-slitno-ili-razdelno/
18 Maikroft
 
27.02.18
22:40
"В виду" в данном случае пишется, кстати, раздельно.)
19 Волшебник
 
27.02.18
22:41
(18) Спасибо за поправку.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн