Имя: Пароль:
1C
1С v8
СКД сложная формула: колонка к колонке
0 Snork
 
09.09.15
12:10
Есть отчет с группировками. В колонках стоит группировка по неделям
Период всегда выбирают 2 недели
Как закодить вычисляемый ресурс вида:
Значение ресурса1 за неделю 1 / Значение ресурса1 за неделю 2,
т.е. как бы значение ресурса неделя к неделе?

Крутил и ВычислитьВыражение и ВычислитьВыражениеСГруппировкойМассив - не выходит. Может кто сталкивался?
1 mistеr
 
09.09.15
12:19
Если всегда две недели, то можно разделить их еще в запросе.
2 Престарелый Заяц
 
09.09.15
12:24
Я так и не добился ни у кого как можно ссылаться на колонку.
Видимо никак ?
3 Анцеранана
 
09.09.15
12:37
(2) Я сделал так: вычисляемое поле "Рентабельность" и ничего туда не прописывал и макет, куда в параметры макета выражение прописал выражение.
После этого у меня все начало вычисляться. Сделал для того, чтобы не суммировался этот показатель по группировкам.
Не знаю как это поможет автору, может и не поможет но на ваш вопрос вроде ответил))
4 Snork
 
09.09.15
13:20
(2) засада в том, что мне приносили распечатку аналогичного отчета, где это сделано (и без выбора 2ух периодов). но кода естественно нет
5 Snork
 
09.09.15
13:43
ап
6 Престарелый Заяц
 
09.09.15
13:47
(3) вопрос выглядел так
СКД Получить последнее значение группировки и количество группировок.

Чем мне здесь может помочь вычисляемое поле слабо понимаю.
7 D3O
 
09.09.15
13:49
(4) откуда уверенность, что там запрос не получал 2 периода?
8 xaozai
 
09.09.15
14:11
(0) Запрос:

ВЫБРАТЬ
    Сгруппировано.Значение1,
    Сгруппировано.Значение2,
    Сгруппировано.Неделя
ПОМЕСТИТЬ ВсеДанные
ИЗ
    (ВЫБРАТЬ
        1 КАК Значение1,
        2 КАК Значение2,
        НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2015, 1, 7), НЕДЕЛЯ) КАК Неделя
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        3,
        4,
        НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015, 1, 7), ДЕНЬ, 7), НЕДЕЛЯ)) КАК Сгруппировано
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВсеДанные.Значение1,
    ВсеДанные.Значение2,
    ВсеДанные.Неделя
ПОМЕСТИТЬ ДанныеЗаПервуюНеделю
ИЗ
    ВсеДанные КАК ВсеДанные
ГДЕ
    ВсеДанные.Неделя В
            (ВЫБРАТЬ
                МИНИМУМ(ВсеДанные.Неделя)
            ИЗ
                ВсеДанные)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВсеДанные.Значение1,
    ВсеДанные.Значение2,
    ВсеДанные.Неделя
ПОМЕСТИТЬ ДанныеЗаВторуюНеделю
ИЗ
    ВсеДанные КАК ВсеДанные
ГДЕ
    ВсеДанные.Неделя В
            (ВЫБРАТЬ
                МАКСИМУМ(ВсеДанные.Неделя)
            ИЗ
                ВсеДанные)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДанныеЗаПервуюНеделю.Значение1 КАК Значение1_н1,
    ДанныеЗаПервуюНеделю.Значение2 КАК Значение2_н1,
    ДанныеЗаПервуюНеделю.Неделя КАК Неделя1,
    ДанныеЗаВторуюНеделю.Значение1 КАК Значение1_н2,
    ДанныеЗаВторуюНеделю.Значение2 КАК Значение2_н2,
    ДанныеЗаВторуюНеделю.Неделя КАК Неделя2,
    ДанныеЗаПервуюНеделю.Значение1 / ДанныеЗаВторуюНеделю.Значение1 КАК Отношение1,
    ДанныеЗаПервуюНеделю.Значение2 / ДанныеЗаВторуюНеделю.Значение2 КАК Отношение2
ПОМЕСТИТЬ Отношения
ИЗ
    ДанныеЗаПервуюНеделю КАК ДанныеЗаПервуюНеделю,
    ДанныеЗаВторуюНеделю КАК ДанныеЗаВторуюНеделю
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВсеДанные.Значение1,
    ВсеДанные.Значение2,
    ВсеДанные.Неделя,
    Отношения.Отношение1,
    Отношения1.Отношение2
ИЗ
    ВсеДанные КАК ВсеДанные
        ЛЕВОЕ СОЕДИНЕНИЕ Отношения КАК Отношения
        ПО ВсеДанные.Неделя = Отношения.Неделя1
        ЛЕВОЕ СОЕДИНЕНИЕ Отношения КАК Отношения1
        ПО ВсеДанные.Неделя = Отношения1.Неделя2


Результат:
http://f6.s.qip.ru/XlyR7k82.png
9 Snork
 
09.09.15
17:26
(8) нужно период выбирать 1, а не 2., соответственно выборка должна быть одна
10 DTXyupyup
 
09.09.15
17:32
Получается, что у тебя в измерениях есть неделя. Соединением можно к неделе присобачить предыдущее значение измерения (предыдущую неделю). Дальше просто.
Соединение примерно следующим образом: Период1 < Период2. Потом группировка Макс(Период1) по Период2
11 mikecool
 
09.09.15
17:34
(0) видимо плохо крутил, у меня работает отношение предыдущего периода к текущему
12 xaozai
 
09.09.15
17:39
(9) Изначально там выборка, состоящая из двух недель, поле неделя там одно. Вполне подходит под условия в (0).
13 DTXyupyup
 
09.09.15
18:31
(12) Там две виртуальные таблицы для первой и второй недели, так что не очень.
14 xaozai
 
09.09.15
20:30
(13) Что не очень-то? Там, где данные группируются (вложенный запрос) - обычная выборка.
15 DTXyupyup
 
09.09.15
20:43
(14) Я про это:
ВЫБРАТЬ
    ВсеДанные.Значение1,
    ВсеДанные.Значение2,
    ВсеДанные.Неделя
ПОМЕСТИТЬ ДанныеЗаПервуюНеделю
ИЗ
    ВсеДанные КАК ВсеДанные
ГДЕ
    ВсеДанные.Неделя В
            (ВЫБРАТЬ
                МИНИМУМ(ВсеДанные.Неделя)
            ИЗ
                ВсеДанные)
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВсеДанные.Значение1,
    ВсеДанные.Значение2,
    ВсеДанные.Неделя
ПОМЕСТИТЬ ДанныеЗаВторуюНеделю
ИЗ
    ВсеДанные КАК ВсеДанные
ГДЕ
    ВсеДанные.Неделя В
            (ВЫБРАТЬ
                МАКСИМУМ(ВсеДанные.Неделя)
            ИЗ
                ВсеДанные)
;
16 xaozai
 
09.09.15
22:26
(15) Ну, и что не так с этими временными таблицами?
Хотите - переделайте на вложенные запросы...

На то, что получается в итоге это не повлияет. ВТ читаются легче просто.

Еще раз, вместо самого первого подзапроса с объединением в реальности будет выборка из нужной таблицы. А здесь просто данные для примера.
17 Snork
 
10.09.15
22:35
(11) поделись как?