А вообще нужно еще остаток на первую и последнюю дату в выборке поделить пополам, это возможно?
Если нет, то хотя бы просто остатки в таком вот виде выдернуть.
Используй ОстаткиИОбороты, в параметрах виртуальной таблицы поставь "День", как остатки бери "КонечныйОстаток".
Что-то вроде этого:
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
(4)Так не попадут дни с нулевым остатком или когда не было движений
(5)Там на примере СКД, а мне в запросе это получить надо по каждой номенклатуре для дальнейшей обработки
(5)Там на примере СКД, а мне в запросе это получить надо по каждой номенклатуре для дальнейшей обработки
СКД можно использовать не только для вывода данных на экран, но и в коллекцию значений.
Посмотрите в сторону объекта "ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений".
Если в запросе, то тоже есть вариант, примерно так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День, , ) КАК ТоварыНаСкладахОстаткиИОбороты
|ИТОГИ ПО
| Период ПЕРИОДАМИ(ДЕНЬ, , )";
(10) Тогда Вам подойдет обработка из "Расчет средних по периодам - это элементарно". Нужно ее немного изменить. Формула и выкладки в статье приведены. Перепишите их на свой случай. Если для Вас это затруднительно, чуть позже я смогу показать как это сделать.
(11) ildarovich, посмотрел формулы, метод интересный очень,видно, но пока не выходит переложить его на мой случай. Был бы признателен, если бы подсказали на этот счёт.
(12)
Если я правильно понял смысл формулы,то он в том, что при усреднении остатков по периодам внутри интервала мы усредняем не остатки на конец каждого периода,а среднее остатков на начало и конец каждого периода. То есть мы не можем решить, что есть остаток для, например,заданного дня: остаток на начало дня или остаток на конец дня. Поэтому остатком считаем среднее остатка на начало и конец. Отсюда и следует предложенная формула. Для выкладок и написания запроса ее удобнее записать так:
S`= (So/2 + S1 + S2 + S3 + ... + Sn/2) / n,
начав отсчет с нуля. Si - это остаток на момент i. So - начальный остаток на начало интервала, S1 - остаток на конец первого периода. Если D1 - это оборот на первом периоде,то S1 = So + D1 и так далее. Тогда знаменатель среднего можно написать так:
S`= (So/2 + S1 + S2 + S3 + ... + Sn/2) / n = So + Сумма по i=1,n Di*(n+1/2-i)/n.
В итоге запрос должен выглядеть так:
ВЫБРАТЬ
Номенклатура,
СУММА(ВЫБОР КОГДА Период = &НачалоПериода ТОГДА КоличествоНачальныйОстаток ИНАЧЕ 0 КОНЕЦ + КоличествоОборот * (РАЗНОСТЬДАТ(Период,
&КонецПериода, ДЕНЬ) + 0.5) / (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1)) КАК СреднийЗапас
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , )
СГРУППИРОВАТЬ ПО
Номенклатура
Показать
Конечно, желательно все еще раз проверить и протестировать на проверяемых вручную данных.