Имя: Пароль:
1C
1С v8
v8: Несложный запрос. Подскажите Что-то парюсь.
0 temsa
 
05.12.13
18:41
Есть РС
Измерения - Авто  Спр
          - Шина   спр
Ресурс    - Эксплутируется  Булево

Хочу вытащить Авто, Шина, Датаначала, ДатаОкончания (Эксплуатации)

1 Просто таблицу брать?
2 Взять срез последних?
3 Срез первых и срез последних объединить.

Как это сделать? Я еще дальше буду обединять с другими таблицами еще..
1 zak555
 
05.12.13
18:43
даты это период ?
2 temsa
 
05.12.13
18:44
(1)Ага
3 temsa
 
05.12.13
18:46
признак начала это когда Эксплутируется Истина
а признак конца когда  Эксплутируется Ложь
4 zak555
 
05.12.13
18:46
так в твоём РС могут быть повторы
5 zak555
 
05.12.13
18:47
01.01 авто1 шина1 Истина
31.01 авто1 шина1 Ложь

01.03 авто1 шина1 Истина
31.03 авто1 шина1 Ложь
6 temsa
 
05.12.13
18:48
(5) Предполагается что одна шина у одной машины живет всего лишь один раз.

Хотя бывает с одной машины на другой кидают. Очень редко.
7 1sik
 
05.12.13
18:50
если правильно понял логику срез последних с условие ложь, потом срез с условием истина, вытащить из них периоды и соединить по двум измерениям. только условие накладывать надо именно в самой виртуальной таблице, а еще надо обработать те записи в которых ввод в эксплуатацию был а вывода не было.
8 temsa
 
05.12.13
18:53
(7) Точно понял. Но у меня что-то в запросе не получается.

пробовал МИНИМУМ(ШиныТССрезПоследних.Период) не работает.
9 1sik
 
05.12.13
18:53
если одно колесо на одну машину один раз поставил потом сняли потом снова поставили но не сняли, то придется проверку запилить
10 1sik
 
05.12.13
18:54
давай сюда весь запрос
11 temsa
 
05.12.13
18:55
(9) Я пока этим не заморачиваюсь хотя отлично понимаю.
12 temsa
 
05.12.13
18:55
(10) так у меня в саомо начала в скд не идет ничего.. (((
13 1sik
 
05.12.13
18:57
я бы посоветовал все делать в консоле запросов, а уже потом добавлять в скд, так прозрачнее все.
14 temsa
 
05.12.13
19:00
ВЫБРАТЬ
    ШиныТССрезПоследних.ТС,
    ШиныТССрезПоследних.Шина,
    ШиныТССрезПоследних.Период КАК Нач,
    ШиныТССрезПоследних1.Период КАК Кон
ИЗ
    РегистрСведений.ШиныТС.СрезПоследних(, Эксплуатируется) КАК ШиныТССрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ШиныТС.СрезПоследних(, НЕ Эксплуатируется) КАК ШиныТССрезПоследних1
        ПО ШиныТССрезПоследних.Шина = ШиныТССрезПоследних1.Шина
            И ШиныТССрезПоследних.ТС = ШиныТССрезПоследних1.ТС

Ни хрена не выходит
15 mistеr
 
05.12.13
19:01
(0) Полная аналогия с регистром РаботникиОрганизации. Посмотреть запросы к нему...
16 temsa
 
05.12.13
19:02
(13) Что удивительно в консоли выдал одну запись а в скд ничего.
17 1sik
 
05.12.13
19:06
а что выдают эти таблицы если их отдельно запускать?
18 temsa
 
05.12.13
19:07
уже продвинулся.

ВЫБРАТЬ
    ШиныТССрезПоследних.ТС,
    ШиныТССрезПоследних.Шина,
    ЕСТЬNULL(ШиныТССрезПоследних.Период,1) КАК Нач,
    ЕСТЬNULL(ШиныТССрезПоследних1.Период,1) КАК Кон
ИЗ
    РегистрСведений.ШиныТС.СрезПоследних(, Эксплуатируется) КАК ШиныТССрезПоследних
        левое СОЕДИНЕНИЕ РегистрСведений.ШиныТС.СрезПоследних(, НЕ Эксплуатируется) КАК ШиныТССрезПоследних1
        ПО ШиныТССрезПоследних.Шина = ШиныТССрезПоследних1.Шина
            И ШиныТССрезПоследних.ТС = ШиныТССрезПоследних1.ТС

Выдало всю таблицу
19 temsa
 
05.12.13
19:08
Что мне ставить вместо 1 тут:
ЕСТЬNULL(ШиныТССрезПоследних.Период,1) КАК Нач, ???
20 1sik
 
05.12.13
19:08
потому и советую с консоли начать, в скд надо еще правильно выводимые поля настроить
21 temsa
 
05.12.13
19:08
Блин мне еще надо вычислить разницу этих дат...в днях
22 1sik
 
05.12.13
19:10
что нибудь что будет легче потом обрабатывать , можно дату 2999 год, можно выводить булевное дополнительное поле, типа еще в эксплуатации, тут уж от задачи зависет
23 1sik
 
05.12.13
19:12
есть функция разность дат, только ее надо использовать тогда когда конечная есть . а на это есть функцию языка запросов выбор
24 temsa
 
05.12.13
19:17
(23) Спасибо за стремление помочь. НО разность дат и выбор я знаю. Проблема в том что это мой запрос должен сесть во временною таблицу с кторорй дальше надо будет пробег объединять и нормы пробега
25 1sik
 
05.12.13
19:21
а в чем проблема с помещением всего этого во временную, и разве без вт не обойтись?
26 temsa
 
05.12.13
20:06
ВЫБРАТЬ
    ШиныТССрезПоследних.ТС,
    ШиныТССрезПоследних.Шина,
    ЕСТЬNULL(ШиныТССрезПоследних.Период,&Дата1) КАК Нач,
    ЕСТЬNULL(ШиныТССрезПоследних1.Период,&Дата1) КАК Кон
    ПОМЕСТИТЬ ВТ_ДатыЗамены
ИЗ
    РегистрСведений.ШиныТС.СрезПоследних(, Эксплуатируется) КАК ШиныТССрезПоследних
    левое СОЕДИНЕНИЕ РегистрСведений.ШиныТС.СрезПоследних(, НЕ Эксплуатируется) КАК ШиныТССрезПоследних1
    ПО ШиныТССрезПоследних.Шина = ШиныТССрезПоследних1.Шина
    И ШиныТССрезПоследних.ТС = ШиныТССрезПоследних1.ТС
СГРУППИРОВАТЬ ПО
ШиныТССрезПоследних.ТС,
ШиныТССрезПоследних.Шина
27 temsa
 
05.12.13
20:07
пишет

{ВнешняяОбработка.КонсольЗапросов_82.МодульОбъекта(55)}: Ошибка при вызове метода контекста (ВыполнитьПакет): {(4, 11)}: Поле не входит в группу "ШиныТССрезПоследних.Период"
ЕСТЬNULL(<<?>>ШиныТССрезПоследних.Период,&Дата1) КАК Нач,
28 temsa
 
05.12.13
20:53
Родил такой запрос.
Но только не сгруппировал по шинам. Как?

ВЫБРАТЬ
    ШиныТССрезПоследних.ТС,
    ШиныТССрезПоследних.Шина,
    ЕСТЬNULL(ШиныТССрезПоследних.Период, &Дат) КАК Нач,
    ЕСТЬNULL(ШиныТССрезПоследних1.Период, &Дат) КАК Кон
ПОМЕСТИТЬ ВТ_ДатыЗамен
ИЗ
    РегистрСведений.ШиныТС.СрезПоследних(, Эксплуатируется) КАК ШиныТССрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШиныТС.СрезПоследних(, НЕ Эксплуатируется) КАК ШиныТССрезПоследних1
        ПО ШиныТССрезПоследних.Шина = ШиныТССрезПоследних1.Шина
            И ШиныТССрезПоследних.ТС = ШиныТССрезПоследних1.ТС

СГРУППИРОВАТЬ ПО
    ШиныТССрезПоследних.ТС,
    ШиныТССрезПоследних.Шина,
    ЕСТЬNULL(ШиныТССрезПоследних.Период, &Дат),
    ЕСТЬNULL(ШиныТССрезПоследних1.Период, &Дат)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ДатыЗамен.ТС,
    ВТ_ДатыЗамен.Шина,
    ВТ_ДатыЗамен.Нач,
    ВТ_ДатыЗамен.Кон,
    ПробегПоСпидометруОбороты.ПробегПриход КАК Пробег
ПОМЕСТИТЬ ВТ_Пробег
ИЗ
    ВТ_ДатыЗамен КАК ВТ_ДатыЗамен
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПробегПоСпидометру.Обороты(, &Дат, День, ) КАК ПробегПоСпидометруОбороты
        ПО ВТ_ДатыЗамен.ТС = ПробегПоСпидометруОбороты.ТС
            И ВТ_ДатыЗамен.Нач <= ПробегПоСпидометруОбороты.Период
            И ВТ_ДатыЗамен.Кон >= ПробегПоСпидометруОбороты.Период
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ДатыЗамен.ТС,
    ВТ_ДатыЗамен.Шина,
    ВТ_ДатыЗамен.Нач,
    ВТ_ДатыЗамен.Кон,
    ВТ_Норма.НормаПробега,
    ВТ_Пробег.Пробег
ИЗ
    ВТ_ДатыЗамен КАК ВТ_ДатыЗамен
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Пробег КАК ВТ_Пробег
        ПО ВТ_ДатыЗамен.ТС = ВТ_Пробег.ТС
            И ВТ_ДатыЗамен.Шина = ВТ_Пробег.Шина
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Норма КАК ВТ_Норма
        ПО ВТ_ДатыЗамен.ТС = ВТ_Норма.ТС