Имя: Пароль:
1C
 
СКД - Расчет среднего
0 serg999
 
23.02.21
18:57
Добрый день, вопрос расчета среднего значения

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

Настройка:
https://www.screencast.com/t/eqajUT7b9p3
https://www.screencast.com/t/Xam9XO9QK2m5

Результат "Средний остаток", считает не правильно .. Может какая галочка в СКД волшебная есть ?
https://www.screencast.com/t/DUXaVpOg38
1 ДенисЧ
 
23.02.21
19:11
В декабре у тебя NULL, вот и.
2 Ненавижу 1С
 
гуру
23.02.21
19:14
(0) сделайте в запросе периодичность МЕСЯЦ
в ресурсе проще сделать так: Сумма(Остаток)/(РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)+1)
3 serg999
 
23.02.21
19:20
(2) Сумма получается 1 897, вместо положенной ~7 489
4 Ненавижу 1С
 
гуру
23.02.21
19:30
(3) у вас в таблице данные на первый, последний и месяцы движения, отсюда и такой результат
(699+699+474+0)/4 = 474,25
чтобы остатки "работали", надо выводить начальные и конечные и устанавливать соответствующие роли
5 toypaul
 
гуру
23.02.21
19:51
Тут скорее всего проблема в том как работает метод дополнения и как считает функция "Среднее". "Среднее" считает по исходным данным - до того как срабатывает дополнение. Поэтому остаток на каждую дату оно не видит.

Решить проблему можно только таким образом чтобы в исходном наборе которые возвращает запрос были данные по остаткам на каждую дату.
6 toypaul
 
гуру
23.02.21
19:54
СКД не понимает что вы хотите посчитать среднее по всем датам периода. Сумма(Остаток) / "Количество периодов" тоже не сработает. По той же причине что и в (5).
7 serg999
 
23.02.21
20:11
(5) Да нашел запрос, который выводи список месяцев по периоду, кончено можно, ну как совсем резервный вариант.
(4) Насчет настройки ролей, мне показалось то, что надо ... но я никогда этим не пользовался, сижу разбираюсь, но пока ни фига понять не могу ..
(6) Он и сумму корректно не считает .
8 serg999
 
23.02.21
20:40
Блин вроде и задача плевая, а не получается :(
9 Ненавижу 1С
 
гуру
23.02.21
20:57
(6) да, ты прав, красиво не вышло



ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДанныеПроизводственногоКалендаря.Дата КАК Дата
ПОМЕСТИТЬ Календарь
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
    ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачПериода И &КонПериода
    И ДанныеПроизводственногоКалендаря.Дата = НАЧАЛОПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, МЕСЯЦ)
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Календарь.Дата КАК Дата,
    МАКСИМУМ(ТЗ.Период) КАК Период
ПОМЕСТИТЬ Периоды
ИЗ
    Календарь КАК Календарь
        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
        ПО Календарь.Дата >= ТЗ.Период

СГРУППИРОВАТЬ ПО
    Календарь.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Периоды.Дата КАК Месяц,
    ТЗ.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
    ТЗ.ВНаличииПриход КАК ВНаличииПриход,
    ТЗ.ВНаличииРасход КАК ВНаличииРасход,
    ТЗ.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
    ЕСТЬNULL(ТЗОстатки.ВНаличииКонечныйОстаток,0) КАК СреднийОстаток
ИЗ
    Периоды КАК Периоды
        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
        ПО Периоды.Дата = ТЗ.Период
        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗОстатки
        ПО Периоды.Период = ТЗОстатки.Период
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший