Имя: Пароль:
1C
1С v8
Среднее в итогах ; баг или фича ?
0 Aleks73
 
25.06.13
10:14
1С:Предприятие 8.2 (8.2.13.219)
запрос.Текст =     "ВЫБРАТЬ
| ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК Период,
| ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Количество,
| ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость
|ИЗ
|    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
|            &д1,
|            &д2,
|            День,
|            ,) КАК ПартииТоваровНаСкладахОстаткиИОбороты
|ИТОГИ
|    СРЕДНЕЕ(Количество),
|    СРЕДНЕЕ(Стоимость)
|ПО
|    Номенклатура" ;
               
в итогах - не среднее, а последняя запись по номенклатуре.
почему - пока не понимаю.
делал даже через вложеннный запрос - результат один...
я туплю или такое не сделаешь ? если туплю - в чём ?

конечно я выкручусь через пересчет в таблице значений, НО
абыдно, слющай ?! )))
1 1Cv8_accepted
 
25.06.13
10:15
В рамках периода получается. По всему регистру было бы среднее арифметическое.
2 Сергей Д
 
25.06.13
10:16
Про какую-то такую фичу нам говорили на курсах. Типа "если сделать вот так в запросе с регистром накопления, то будет вот так, а не вот так". Не помню только, про что говорили. :(
3 1Cv8_accepted
 
25.06.13
10:16
(1) + У тебя периодичность - День.
4 Aleks73
 
25.06.13
10:17
(1),(3) Через вложенный запрос получается то же самое

   запрос.Текст =     "ВЫБРАТЬ
                      |    вз.Номенклатура КАК Номенклатура,
                      |    вз.Период КАК Период,
                      |    вз.Количество КАК Количество,
                      |    вз.Стоимость КАК Стоимость
                      |ИЗ
                      |    (ВЫБРАТЬ
                      |        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                      |        ПартииТоваровНаСкладахОстаткиИОбороты.Период КАК Период,
                      |        ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Количество,
                      |        ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость
                      |    ИЗ
                      |        РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
                      |                &д1,
                      |                &д2,
                      |                День,
                      |                ,
                      |                Склад В ИЕРАРХИИ (&спис2)
                      |                    И Номенклатура В ИЕРАРХИИ (&спис)) КАК ПартииТоваровНаСкладахОстаткиИОбороты) КАК вз
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    вз.Номенклатура.Наименование,
                      |    Период
                      |ИТОГИ
                      |    СРЕДНЕЕ(Количество),
                      |    СРЕДНЕЕ(Стоимость)
                      |ПО
                      |    Номенклатура" ;
5 Aleks73
 
25.06.13
10:20
up
6 ssh2006
 
25.06.13
10:27
(0) в запросе надо выбирать парное поле сотатка для корректного расчета итогов, посмотри статью на ИТС
7 Aleks73
 
25.06.13
10:50
(6) прочитал, сделал парные, тольку - 0.

запрос.Текст =     "ВЫБРАТЬ
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Количество,
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость,
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток,
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень
                  |ИЗ
                  |    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
                  |            &д1,
                  |            &д2,
                  |            Авто,
                  |            ,
                  |            Склад В ИЕРАРХИИ (&спис2)
                  |                И Номенклатура В ИЕРАРХИИ (&спис)) КАК ПартииТоваровНаСкладахОстаткиИОбороты
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура.Наименование
                  |ИТОГИ
                  |    СРЕДНЕЕ(Количество),
                  |    СРЕДНЕЕ(КоличествоНачальныйОстаток),
                  |    СРЕДНЕЕ(Стоимость),
                  |    СРЕДНЕЕ(СтоимостьНачальныйОстаток)
                  |ПО
                  |    Номенклатура" ;
8 vicof
 
25.06.13
10:53
(6) Это фича СКД, просто к запросам отношения не имеет
9 Aleks73
 
25.06.13
11:05
от сильной печали сделал так... но без толку.
       запрос.Текст =     "ВЫБРАТЬ
                          |    вз.Номенклатура КАК Номенклатура,
                          //|    вз.ПериодДень КАК Период,
                          |    вз.Количество КАК Количество,
                          |    вз.Стоимость КАК Стоимость
                          |ИЗ
                          |    (ВЫБРАТЬ
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Количество,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток КАК Стоимость,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень КАК ПериодДень,
                          |        ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор
                          |    ИЗ
                          |        РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
                          |                &д1,
                          |                &д2,
                          |                Авто,
                          |                ,
                          |                Склад В ИЕРАРХИИ (&спис2)
                          |                    И Номенклатура В ИЕРАРХИИ (&спис)) КАК ПартииТоваровНаСкладахОстаткиИОбороты) КАК вз
                          |
                          |УПОРЯДОЧИТЬ ПО
                          |    вз.Номенклатура.Наименование
                          //|    Период
                          |ИТОГИ
                          |    СРЕДНЕЕ(Количество),
                          |    СРЕДНЕЕ(Стоимость)
                          |ПО
                          |    Номенклатура" ;
10 Пеппи
 
25.06.13
11:13
Чисто из любопытства вопрос- ты среднее за какой период видеть хочешь?
11 Aleks73
 
25.06.13
11:13
(10) месяц
12 ssh2006
 
25.06.13
11:17
(8) в общем да, с запросами система сама решает:

"Для того чтобы запрос мог рассчитать итоги по полям остатка необходимо, чтобы в запросе получались оба значения остатка за период: начальный и конечные остатки. В случае, когда в запросе получается только один из остатков и по данному остатку ведется расчет итога, программа неявно добавит в запрос получения данных из информационной базы поле парного остатка."
http://its.1c.ru/db/metod81#content:2664:1

В принципе, из этой статьи можно получить объяснение, почему в итогах значение последней записи:

"записи упорядочиваются полям первого уровня, по которым еще не осуществлялась группировка и по полям периода, после чего осуществляется обход записей. Первые записи для комбинации полей первого уровня используются для суммирования начального остатка, последние - для расчета конечного остатка."
Вероятно, программа рассчитывает среднее от последней по периоду записи, т.е. получает одно последнее значение
13 hhhh
 
25.06.13
11:17
раньше была фича: NULL неправильно обрабатывало. ДОпустим 100 штук NULL и одна строчка со значением, она делила всё на 101.
14 Aleks73
 
25.06.13
11:18
(12) это по конечному остатку. по начальному - наоборот = первая запись.
15 Aleks73
 
25.06.13
11:19
(13) она не делит ваще.
16 Aleks73
 
25.06.13
11:22
(13) Из любопытства прописал естьнулл - без толку
17 ssh2006
 
25.06.13
11:23
(14) в общем это не баг, а фича. Помещай в ВТ и потом уже среднее
18 Aleks73
 
25.06.13
11:24
(17) кинь кусок, а то я уже задрался проверять версии.
сижу в пичали.
19 ssh2006
 
25.06.13
11:26
(4) > Через вложенный запрос получается то же самое

Во вложенном запросе система тоже распознает поля остатка с версии 8.2.10

"Если во вложенном запросе получаются поля остатка, то и во внешнем запросе эти поля считаются полями остатка, и итоги по этим полям рассчитываются как по полям остатка. В режиме совместимости с версией 8.1 поведение не изменилось (поля остатка, полученные из вложенного запроса полями остатка не считаются, и итоги по ним рассчитываются как по обычным полям)."
20 ssh2006
 
25.06.13
11:28
(18)

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ДанныеРегистра.Номенклатура КАК Номенклатура,
   ДанныеРегистра.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
   ДанныеРегистра.Период
ИЗ
   ДанныеРегистра КАК ДанныеРегистра
ИТОГИ
   СРЕДНЕЕ(КоличествоКонечныйОстаток)
ПО
   Номенклатура
21 Aleks73
 
25.06.13
11:56
(20) Уфф.... Спасибо, доктор ! (С)
официант, триста капель варельянки - и салат !
...
встретишь Джавдета - не трогай его . Он мой.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший