Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Отбор по регистру сведений

Отбор по регистру сведений
Я
   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
срочно перепиши пока начальники не видели
   Maikroft
 
2 - 27.02.18 - 19:39
Да здесь нечего смотреть, стандарт.)
   Йохохо
 
3 - 27.02.18 - 19:40
(2) корпоративный?)
   Maikroft
 
4 - 27.02.18 - 19:41
Хе-хе, нет, тарифный, скорее.)
   Волшебник
 
5 - 27.02.18 - 19:42
Вы бы хоть уточнили соединение между таблицами.
   Йохохо
 
6 - 27.02.18 - 19:49
(4) получи срез столбцом, а потом разбери в строку, через выбор когда объединить. Если принципиально запросом строку получить
   Maikroft
 
7 - 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/Прямое_произведение это пиздец для СУБД
   Maikroft
 
10 - 27.02.18 - 20:57
Спасибо за совет, сейчас попробую сделать один срез, а остальные поля выбором.
 
 Рекламное место пустует
   Maikroft
 
11 - 27.02.18 - 22:11
Дрянь.
Все равно, если нет записи в регистре (по РезервFIN, к примеру) ставит NULL

ВЫБРАТЬ
    СУММА(ВЫБОР
            КОГДА ТарифнаяСеткаСрезПоследних.ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервEUR)
                ТОГДА ТарифнаяСеткаСрезПоследних.Тариф
            ИНАЧЕ 0
        КОНЕЦ) КАК РезервEUR,
    СУММА(ВЫБОР
            КОГДА ТарифнаяСеткаСрезПоследних.ВидТарифа = ЗНАЧЕНИЕ(Перечисление.ТарифнаяСетка.РезервFIN)
                ТОГДА ТарифнаяСеткаСрезПоследних.Тариф
            ИНАЧЕ NULL
        КОНЕЦ) КАК РезервFIN
ИЗ
    РегистрСведений.ТарифнаяСетка.СрезПоследних(&Период, ) КАК ТарифнаяСеткаСрезПоследних
ГДЕ
    И ТарифнаяСеткаСрезПоследних.Период = &Период
   Maikroft
 
12 - 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
»
   Maikroft
 
16 - 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/
   Maikroft
 
18 - 27.02.18 - 22:40
"В виду" в данном случае пишется, кстати, раздельно.)
   Волшебник
 
19 - 27.02.18 - 22:41
(18) Спасибо за поправку.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует