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

1С:Предприятие ::

Метки: 

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

Я
   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 человек.
Рекламное место пустует