Имя: Пароль:
1C
1С v8
Получить последовательности значений в запросе
0 vicof
 
17.03.15
17:18
01.01.2015    1    1
02.01.2015    1    2
03.01.2015    1    3
04.01.2015    0    0
05.01.2015    1    1
06.01.2015    1    2
07.01.2015    0    0
08.01.2015    0    0
09.01.2015    0    0
10.01.2015    0    0
11.01.2015    1    1
12.01.2015    1    2

Есть табличка с двумя колонками. Дата и цифра. Нужно получить третью колонку.
Т.е. нарастающий итог до первого нуля. Потом нарастающий итог должен считаться заново.
Каким макаром? Просто нарастающий итог вывел.
1 Nuobu
 
17.03.15
17:20
(0) Выведи из этой таблицы таблицу нулей. И левым соединением с ней по максимуму.
2 palpetrovich
 
17.03.15
17:26
зачем запросом? банальной выборкой имхо проще и наглядней
3 vicof
 
17.03.15
17:29
(2) Потому что эти цифры дальше будут участвовать в запросе.
4 Крошка Ру
 
17.03.15
17:45
5 D_E_S_131
 
17.03.15
17:46
Головоломство какое-то. Интересно как Nuobu в (1) предлагал сделать.

(4) "Последнее значение" <> "Нарастающий итог"
6 Nuobu
 
17.03.15
18:09
(5) Берешь таблицу с нулями и периодами.
Получается так:
04.01.2015    0    0
07.01.2015    0    0
08.01.2015    0    0
09.01.2015    0    0
10.01.2015    0    0.
Потом берешь таблицу без нулей:
01.01.2015    1    1
02.01.2015    1    2
03.01.2015    1    3
05.01.2015    1    1
06.01.2015    1    2
11.01.2015    1    1
12.01.2015    1    2
По полю ПериодСНулями < ПериодБезНулей и группировкой по второму периоду получаешь таблицу:
04.01.2015    0    0 03.01.2015
07.01.2015    0    0 06.01.2015
08.01.2015    0    0 06.01.2015
09.01.2015    0    0 06.01.2015
10.01.2015    0    0 06.01.2015
И дальше левым соединением по второму периоду соединяешь с первой таблицей:
04.01.2015    0    0 03.01.2015  3
07.01.2015    0    0 06.01.2015  2
08.01.2015    0    0 06.01.2015  2
09.01.2015    0    0 06.01.2015  2
10.01.2015    0    0 06.01.2015  2.

Или я что-то не так понял?
7 Крошка Ру
 
17.03.15
18:56
(5) Я понимаю.
Но принцип такой же. Только при соединении брать не максимум, а сумму.
8 vicof
 
20.03.15
15:53
Сделал.
Всем спасибо.

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    фдУстановкаГрафиковИнвентаризацийГрафики.Контрагент,
    фдУстановкаГрафиковИнвентаризацийГрафики.ВидИнвентаризации,
    фдУстановкаГрафиковИнвентаризацийГрафики.Дата
ПОМЕСТИТЬ ВТ_Док
ИЗ
    Документ.фдУстановкаГрафиковИнвентаризаций.Графики КАК фдУстановкаГрафиковИнвентаризацийГрафики
ГДЕ
    фдУстановкаГрафиковИнвентаризацийГрафики.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    фдПериодичностьПроведенияИнвентаризаций.Период,
    фдПериодичностьПроведенияИнвентаризаций.Рейтинг,
    фдПериодичностьПроведенияИнвентаризаций.ПериодичностьПроверки,
    фдПериодичностьПроведенияИнвентаризаций.ПериодичностьПроверки2,
    фдПериодичностьПроведенияИнвентаризаций.ПериодичностьПроверки4
ПОМЕСТИТЬ ВТ_Периодичность
ИЗ
    РегистрСведений.фдПериодичностьПроведенияИнвентаризаций КАК фдПериодичностьПроведенияИнвентаризаций
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    фдИнвентаризацияДилерскихСкладов.Дата,
    фдИнвентаризацияДилерскихСкладов.ВидИнвентаризации,
    фдИнвентаризацияДилерскихСкладов.Контрагент,
    фдИнвентаризацияДилерскихСкладов.Организация,
    ВЫБОР
        КОГДА фдИнвентаризацияДилерскихСкладов.РезультатИнвентаризации = ЗНАЧЕНИЕ(Перечисление.фдРезультатыИнвентаризации.Положительный)
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК РезультатИнвентаризации
ПОМЕСТИТЬ ВТ_РезультатыИнвентаризаций
ИЗ
    Документ.фдИнвентаризацияДилерскихСкладов КАК фдИнвентаризацияДилерскихСкладов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_результатыИнвентаризаций.Дата,
    ВТ_результатыИнвентаризаций.ВидИнвентаризации,
    ВТ_результатыИнвентаризаций.Контрагент,
    ВТ_результатыИнвентаризаций.Организация,
    ВТ_результатыИнвентаризаций.РезультатИнвентаризации
ПОМЕСТИТЬ ВТ_РезультатыСНулевымиДатами
ИЗ
    ВТ_РезультатыИнвентаризаций КАК ВТ_результатыИнвентаризаций
ГДЕ
    ВТ_результатыИнвентаризаций.РезультатИнвентаризации = 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Вложенный.Дата,
    Вложенный.ВидИнвентаризации,
    Вложенный.Контрагент,
    Вложенный.Организация,
    СУММА(ВЫБОР
            КОГДА Вложенный.РезультатИнвентаризации = 0
                ТОГДА 0
            КОГДА Вложенный.РезультатИнвентаризации = 1
                ТОГДА ВЫБОР
                        КОГДА Вложенный.ДатаПредыдущегоНуля >= ВТ_РезультатыИнвентаризаций1.Дата
                                И НЕ Вложенный.ДатаПредыдущегоНуля = ДАТАВРЕМЯ(1, 1, 1)
                            ТОГДА 0
                        ИНАЧЕ Вложенный.РезультатИнвентаризации
                    КОНЕЦ
            ИНАЧЕ 1
        КОНЕЦ) КАК Результат
ИЗ
    (ВЫБРАТЬ
        ВТ_РезультатыИнвентаризаций.Дата КАК Дата,
        ВТ_РезультатыИнвентаризаций.ВидИнвентаризации КАК ВидИнвентаризации,
        ВТ_РезультатыИнвентаризаций.Контрагент КАК Контрагент,
        ВТ_РезультатыИнвентаризаций.Организация КАК Организация,
        ВТ_РезультатыИнвентаризаций.РезультатИнвентаризации КАК РезультатИнвентаризации,
        МАКСИМУМ(ЕСТЬNULL(ВТ_РезультатыСНулевымиДатами.Дата, ДАТАВРЕМЯ(1, 1, 1))) КАК ДатаПредыдущегоНуля
    ИЗ
        ВТ_РезультатыИнвентаризаций КАК ВТ_РезультатыИнвентаризаций
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РезультатыСНулевымиДатами КАК ВТ_РезультатыСНулевымиДатами
            ПО ВТ_РезультатыИнвентаризаций.Организация = ВТ_РезультатыСНулевымиДатами.Организация
                И ВТ_РезультатыИнвентаризаций.Контрагент = ВТ_РезультатыСНулевымиДатами.Контрагент
                И ВТ_РезультатыИнвентаризаций.ВидИнвентаризации = ВТ_РезультатыСНулевымиДатами.ВидИнвентаризации
                И ВТ_РезультатыИнвентаризаций.Дата > ВТ_РезультатыСНулевымиДатами.Дата
    
    СГРУППИРОВАТЬ ПО
        ВТ_РезультатыИнвентаризаций.Дата,
        ВТ_РезультатыИнвентаризаций.ВидИнвентаризации,
        ВТ_РезультатыИнвентаризаций.Контрагент,
        ВТ_РезультатыИнвентаризаций.Организация,
        ВТ_РезультатыИнвентаризаций.РезультатИнвентаризации) КАК Вложенный
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РезультатыИнвентаризаций КАК ВТ_РезультатыИнвентаризаций1
        ПО Вложенный.Организация = ВТ_РезультатыИнвентаризаций1.Организация
            И Вложенный.Контрагент = ВТ_РезультатыИнвентаризаций1.Контрагент
            И Вложенный.ВидИнвентаризации = ВТ_РезультатыИнвентаризаций1.ВидИнвентаризации
            И Вложенный.Дата >= ВТ_РезультатыИнвентаризаций1.Дата

СГРУППИРОВАТЬ ПО
    Вложенный.Дата,
    Вложенный.ВидИнвентаризации,
    Вложенный.Контрагент,
    Вложенный.Организация
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.