Имя: Пароль:
1C
1С v8
Запрос: не вычисляются итоги - глюк или моя ошибка?
0 dave2000
 
25.10.11
17:26
Есть запрос, объединяющий две таблички (был взят из реальной задачи и упрощён до минимума для наглядности).
Тестировалось на УПП, но в похожих конфигурация думаю тоже пойдёт (УТП например).

Результат выполнения запроса:
- итоги по полю "НачОстаток" вычисляются нормально;
- итоги по полю "КонОстаток" не вычисляются!

Почему так, где ошибка?


//-------------запрос-------------------------
ВЫБРАТЬ
      ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
      NULL КАК Регистратор,
      ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОстаток,
      ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОстаток
ПОМЕСТИТЬ Остатки
ИЗ
      РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, , ДвиженияИГраницыПериода, Склад В ИЕРАРХИИ (&Склад)) КАК ТоварыНаСкладахОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
      ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
      ТоварыНаСкладахОстаткиИОбороты.Регистратор,
      0 КАК НачОстаток,
      0 КАК КонОстаток
ПОМЕСТИТЬ Обороты
ИЗ
      РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, Движения, Склад В ИЕРАРХИИ (&Склад)) КАК ТоварыНаСкладахОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
      Остатки.Номенклатура КАК Номенклатура,
      Остатки.Регистратор,
      Остатки.НачОстаток КАК НачОстаток,
      Остатки.КонОстаток КАК КонОстаток
ИЗ
      Остатки КАК Остатки

ОБЪЕДИНИТЬ

ВЫБРАТЬ
      Обороты.Номенклатура,
      Обороты.Регистратор,
      Обороты.НачОстаток,
      Обороты.КонОстаток
ИЗ
      Обороты КАК Обороты
ИТОГИ
      СУММА(НачОстаток),
      СУММА(КонОстаток)
ПО
      Номенклатура
1 Ненавижу 1С
 
гуру
25.10.11
17:29
зачем все эти извраты?
2 Maxus43
 
25.10.11
17:30
в конструкторе делай, увидиш
3 dave2000
 
25.10.11
17:34
(1) так того требует задача, это упрощённый пример, но не в том суть - итоги должны считаться по обеим колонкам, а считаются по одной
(2) в конструкторе ведь и делал
4 dave2000
 
25.10.11
17:40
Может глюк платформы?
5 shuhard
 
25.10.11
17:41
(4) с вероятностью 0,00000000001%
6 dave2000
 
25.10.11
17:55
На что мне обратить внимание, где может быть ошибка? Уже даже и не знаю в какую сторону рыть. Вроде как две простеньких таблички, значения по ним отбираются нормально, а вот итоги не суммирует. Может из-за того данные отбираются из одной таблицы? Но какая разница..
7 AAlexandra
 
25.10.11
18:06
(0) Попробуй написать

ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * 1 КАК КонОстаток

Вместо

ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОстаток

В первом пакете, и будет тебе большое удивление.
8 Живой Ископаемый
 
25.10.11
18:08
2(4) конечно глюк! ты его открыл!
9 dave2000
 
25.10.11
18:39
Кажется нашёл причину. В первой таблице в качестве регистратора я указывал NULL. Если указать пустое значение любого документа, итоги считает правильно. Т.е. заменить

NULL КАК Регистратор,

на

Значение(Документ.РеализацияТоваровУслуг.ПустаяСсылка) КАК Регистратор,


Но не ясно, почему тогда итог "НачОстаток" считался правильно?

(7) Спасибо, работает!) Хотя, очень интерестно почему - что меняет *1? По логике, КоличествоКонечныйОстаток*1 преобразует в число, но КоличествоКонечныйОстаток это и так число.

(8) Подъебнуть каждый мастер, лучше бы по делу что-то подсказал
10 AAlexandra
 
25.10.11
19:09
(9) Гугли, как вычисляются итоги по начальному/конечному остатку для виртуальной таблицы ОстаткиИОбороты - там особый алгоритм, а не просто Сумма(), учитывается период (чтобы удобно было оборотку рисовать).
Если НачОстаток/КонОстаток модифицировать (сложить с чем-то, умножить и т.п.) - агрегатные функции для вычисленного значения работают как для всех обыкновенных полей.
Не знаю как менее коряво объяснить..
11 dave2000
 
25.10.11
19:13
(9) Вышеописанные способы тоже не всегда работают. Похоже, итоги считаются ТОЛЬКО если все поля, учавствующие в итогах, однотипные. В данном случае, поле "Регистратор".
12 dave2000
 
25.10.11
19:16
(10) Пасиб! С утра таки покопаю в этом направлении
13 AAlexandra
 
25.10.11
19:17
(11) Ты хоть задачу опиши, что изначально получить хотелось?