Имя: Пароль:
1C
1С v8
Простое условие в запросе
,
0 Chum
 
14.11.13
15:59
Есть регистр сведений:

Измерения:
План <булево>
Этап1 <справочник>
Этап2 <справочник>

Ресурсы:
Вес <число>
Расстояние <число>

Реквизиты:
ДатаВремяIn <Дата>
ДатаВремяOut <Дата>

Нужно получить таблицу:
Этап1 Этап2 ВесПлан ВесФакт РасстояниеПлан РасстояниеФакт ДатаInПлан ДатаOutПлан ДатаInФакт ДатаOutФакт

Вес, расстояние и т.д. нужно раскидать в разные колонки из этого регистра в зависимости от значения измерения План: если истина, то в колонки План, иначе в Факт.

Не могу сообразить как создать запрос. Вроде ВЫБОР нужно использовать?
1 mikecool
 
14.11.13
16:00
надо использовать выбор
2 Maxus43
 
14.11.13
16:00
да, ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ
3 Chum
 
14.11.13
16:03
А еще нужно свернуть эту таблицу по измерениям Этап1 и Этап2, План нужен только для раскидывания ресурсов и реквизитов по разным колонкам
4 Chum
 
14.11.13
16:05
(1)(2) т.е. что-то вроде:

Выбор
Когда План Тогда
РегистрСведений.ХХХ.Вес
Конец Как ВесПлан
Выбор
Когда НЕ План Тогда
РегистрСведений.ХХХ.Вес
Конец Как ВесФакт

???
5 1dvd
 
14.11.13
16:06
(4) да, но и про ИНАЧЕ не забудь
6 Chum
 
14.11.13
16:06
(5) ага

(1)(2) т.е. что-то вроде:

Выбор
Когда План Тогда
РегистрСведений.ХХХ.Вес
иначе
0
Конец Как ВесПлан
7 Classic
 
14.11.13
16:06
(4)
КОГДА План = Истина

Просто

КОГДА План

вроде не отработает
8 vicof
 
14.11.13
16:08
(7) Отработает
9 Classic
 
14.11.13
16:09
(8)
Тем лучше
10 Chum
 
14.11.13
16:11
Ушел проверять. Спасибо за подсказки
11 Chum
 
15.11.13
12:51
Коллеги, а как свернуть результат запроса при его выполнении?
Склепал вот такой запрос.

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист КАК МаршрутныйЛист,
        |    ВыполнениеМаршрутногоЗадания.ПунктОтправления,
        |    ВыполнениеМаршрутногоЗадания.ПунктПрибытия,
        |    СУММА(ВЫБОР
        |            КОГДА ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.Тонны
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК ВесПлан,
        |    СУММА(ВЫБОР
        |            КОГДА НЕ ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.Тонны
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК ВесФакт,
        |    СУММА(ВЫБОР
        |            КОГДА ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.Расстояние
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК РасстояниеПлан,
        |    СУММА(ВЫБОР
        |            КОГДА НЕ ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.Расстояние
        |            ИНАЧЕ 0
        |        КОНЕЦ) КАК РасстояниеФакт,
        |    ВЫБОР
        |            КОГДА ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяПрибытия
        |            ИНАЧЕ ДатаВремя(1,1,1)
        |    КОНЕЦ КАК ДатаПрибытияПлан,
        |    ВЫБОР
        |            КОГДА НЕ ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяПрибытия
        |            ИНАЧЕ ДатаВремя(1,1,1)
        |    КОНЕЦ КАК ДатаПрибытияФакт,
        |    ВЫБОР
        |            КОГДА ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяУбытия
        |            ИНАЧЕ ДатаВремя(1,1,1)
        |    КОНЕЦ КАК ДатаУбытияПлан,
        |    ВЫБОР
        |            КОГДА НЕ ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяУбытия
        |            ИНАЧЕ ДатаВремя(1,1,1)
        |    КОНЕЦ КАК ДатаУбытияФакт
        |ИЗ
        |    РегистрСведений.ВыполнениеМаршрутногоЗадания КАК ВыполнениеМаршрутногоЗадания
        |ГДЕ
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист.ДатаИВремяОтправленияПлан МЕЖДУ НачалоПериода(&НачПериода, День) И КонецПериода(&КонПериода, День)
        |
        |СГРУППИРОВАТЬ ПО
        |    ВыполнениеМаршрутногоЗадания.План,
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист,
        |    ВыполнениеМаршрутногоЗадания.ПунктОтправления,
        |    ВыполнениеМаршрутногоЗадания.ПунктПрибытия,
        |    ВыполнениеМаршрутногоЗадания.ДатаВремяПрибытия,
        |    ВыполнениеМаршрутногоЗадания.ДатаВремяУбытия
        |УПОРЯДОЧИТЬ ПО
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист.ДатаИВремяОтправленияПлан
        |ИТОГИ
        |    СУММА(ВесПлан),
        |    СУММА(ВесФакт)
        |ПО
        |    МаршрутныйЛист";



Отрабатывает, но выдает результат в виде шахматной доски. мне нужны данные, свернутые по трем колонкам:
МаршрутныйЛист
ПунктОтправления
ПунктПрибытия
остальные колонки должны быть схлопнуты

Пробовал убрать группировку по полю План, но тогда ругается на ВЫБОР КОГДА ВыполнениеМаршрутногоЗадания.План, что нет группировки.
12 Ненавижу 1С
 
гуру
15.11.13
12:56
как планируешь "схлопнуть" даты?
13 Chum
 
15.11.13
12:58
(12) дата там или есть, или ее нет.

Вообще, идеальная картинка была бы такой:
http://media.ffclub.ru/up254350-Bezimyanniy2.jpg
14 Chum
 
15.11.13
12:59
(12) т.е. я хотел сказать, что две строки, в одной дата есть, в другой даты нет. Нужно получить одну строку с датой.
15 viktor_vv
 
15.11.13
13:10
Можно еще саму с собой таблицу полным соединением соединить, тогда без Выбор можно обойтись, и с датами тогда можно разрулить по идее.

Типа такого

        |ИЗ
        |    РегистрСведений.ВыполнениеМаршрутногоЗадания КАК ВыполнениеМаршрутногоЗаданияПлан
        |Полное соединение РегистрСведений.ВыполнениеМаршрутногоЗадания КАК
ВыполнениеМаршрутногоЗаданияФактФакт
   ПО ВыполнениеМаршрутногоЗаданияФакт.МаршрутныйЛист.ДатаИВремяОтправленияПлан МЕЖДУ НачалоПериода(&НачПериода, День) И КонецПериода(&КонПериода, День) И ВыполнениеМаршрутногоЗаданияПлан.Факт
И   ВыполнениеМаршрутногоЗаданияПлан.МаршрутныйЛист = ВыполнениеМаршрутногоЗаданияФакт.МаршрутныйЛист
И т. д.

        |ГДЕ
        |    ВыполнениеМаршрутногоЗаданияПлан.МаршрутныйЛист.ДатаИВремяОтправленияПлан МЕЖДУ НачалоПериода(&НачПериода, День) И КонецПериода(&КонПериода, День) И ВыполнениеМаршрутногоЗаданияПлан.План


тут правда прикинуть как правильнее в Где условие указать.
16 r_p
 
15.11.13
13:16
(13) Группируй с функцией МАКСИМУМ()
17 Chum
 
15.11.13
13:16
(12) блин... дошло.
(15) да, спасибо. через соединение попробую.
Попробую вариант соединения с сортировкой даты по убыванию и выборкой первой строки.
18 Chum
 
15.11.13
13:17
(16) например?
19 r_p
 
15.11.13
13:21
В конструкторе запроса на вкладке "Группировка" засунь твои даты в суммируемые поля, функцию выбери МАКСИМУМ. И все сложится.
20 viktor_vv
 
15.11.13
13:22
И таки да, (16) номрмально. Только В Максимум нельзя Выбор засунуть, вроде как. Если так, то надо сверху еще одним Выбрать обернуть.
21 r_p
 
15.11.13
13:23
(20) А вот и можно. Готов поспорить на 100 долларов =)
22 viktor_vv
 
15.11.13
13:25
(21) Не, спорить не буду :). Сейчас сам забесплатно почитаю, проверю :).
23 Chum
 
15.11.13
15:33
(19) получилось. премного благодарен

что-то вроде этого:
        "ВЫБРАТЬ
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист КАК МаршрутныйЛист,
        |    ВыполнениеМаршрутногоЗадания.ПунктОтправления,
        |    ВыполнениеМаршрутногоЗадания.ПунктПрибытия,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяПрибытия
        |            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
        |        КОНЕЦ) КАК План,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА НЕ ВыполнениеМаршрутногоЗадания.План
        |                ТОГДА ВыполнениеМаршрутногоЗадания.ДатаВремяПрибытия
        |            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
        |        КОНЕЦ) КАК Факт
        |ИЗ
        |    РегистрСведений.ВыполнениеМаршрутногоЗадания КАК ВыполнениеМаршрутногоЗадания
        |
        |СГРУППИРОВАТЬ ПО
        |    ВыполнениеМаршрутногоЗадания.МаршрутныйЛист,
        |    ВыполнениеМаршрутногоЗадания.ПунктОтправления,
        |    ВыполнениеМаршрутногоЗадания.ПунктПрибытия
        |ИТОГИ ПО
        |    МаршрутныйЛист";