Как запросом получить остаток товара на каждый день выбранного периода?

1. Psylocibine 09.11.11 11:56 Сейчас в теме
Как запросом получить остаток товара на каждый день выбранного периода? Ну примерно в таком виде

Дата Остаток

01.01.2011 120
02.01.2011 120
03.01.2011 0
04.01.2011 0
05.01.2011 50
...
31.01.2011 32

А вообще нужно еще остаток на первую и последнюю дату в выборке поделить пополам, это возможно?
Если нет, то хотя бы просто остатки в таком вот виде выдернуть.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. veforg 27 09.11.11 12:00 Сейчас в теме
Одним запросом не отделаться. Нужен запрос на каждый день
3. Psylocibine 09.11.11 12:05 Сейчас в теме
А можно пример запроса?
4. MustDieff 09.11.11 12:09 Сейчас в теме
Используй ОстаткиИОбороты, в параметрах виртуальной таблицы поставь "День", как остатки бери "КонечныйОстаток".
Что-то вроде этого:

ВЫБРАТЬ
	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период,
	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента,
	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
6. Psylocibine 09.11.11 17:41 Сейчас в теме
(4)Так не попадут дни с нулевым остатком или когда не было движений
(5)Там на примере СКД, а мне в запросе это получить надо по каждой номенклатуре для дальнейшей обработки
5. CyberNut 52 09.11.11 12:17 Сейчас в теме
Psylocibine пишет:

А можно пример запроса?

Посмотри вот тут про это написано: 1c-wiki:Ежедневные остатки
Serg_KSV; +1 Ответить
13. CyberNut 52 09.11.11 20:19 Сейчас в теме
Psylocibine пишет:

(5)Там на примере СКД, а мне в запросе это получить надо по каждой номенклатуре для дальнейшей обработки

СКД можно использовать не только для вывода данных на экран, но и в коллекцию значений.
Посмотрите в сторону объекта "ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений­".
7. Kamikaze43 11 09.11.11 17:58 Сейчас в теме
Если в запросе, то тоже есть вариант, примерно так:

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

Запрос.УстановитьПараметр();

Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,,"Все");
8. Psylocibine 09.11.11 18:12 Сейчас в теме
Так тоже выбираются только те дни, когда были движения по номенклатуре.
9. ildarovich 7863 09.11.11 18:19 Сейчас в теме
Эта задача решена здесьv8: Полные остатки по периоду во вложенном запросе.
Выбрать все дни в периоде можно запросом наподобие Порождающий запрос.
Также посмотрите Расчет средних по периодам в запросе - возможно, Вам и не нужны остатки на каждый день периода.
10. Psylocibine 09.11.11 19:09 Сейчас в теме
А средние запасы в указанной обработке расчитаны иначе, чем мне нужно, насколько я понимаю. Вот выдержка из моего ТЗ:

"Правильная формула для подсчета среднего товарного запаса такая:

ТЗср =

Тз1 /2 + Тз2 + Тз3 + Тз4 + … Тзn /2
-------------------------------------------------
n – 1

ТЗ1, ТЗ2, … ТЗn - величина товарного запаса на отдельные даты анализируемого периода,

n – количество дат в периоде."


Из за этого и весь сыр-бор.
11. ildarovich 7863 09.11.11 19:48 Сейчас в теме
(10) Тогда Вам подойдет обработка из "Расчет средних по периодам - это элементарно". Нужно ее немного изменить. Формула и выкладки в статье приведены. Перепишите их на свой случай. Если для Вас это затруднительно, чуть позже я смогу показать как это сделать.
12. Psylocibine 09.11.11 20:11 Сейчас в теме
(11) ildarovich, посмотрел формулы, метод интересный очень,видно, но пока не выходит переложить его на мой случай. Был бы признателен, если бы подсказали на этот счёт.
15. ildarovich 7863 10.11.11 00:25 Сейчас в теме
(12)
Если я правильно понял смысл формулы,то он в том, что при усреднении остатков по периодам внутри интервала мы усредняем не остатки на конец каждого периода,а среднее остатков на начало и конец каждого периода. То есть мы не можем решить, что есть остаток для, например,заданного дня: остаток на начало дня или остаток на конец дня. Поэтому остатком считаем среднее остатка на начало и конец. Отсюда и следует предложенная формула. Для выкладок и написания запроса ее удобнее записать так:

S`= (So/2 + S1 + S2 + S3 + ... + Sn/2) / n,

начав отсчет с нуля. Si - это остаток на момент i. So - начальный остаток на начало интервала, S1 - остаток на конец первого периода. Если D1 - это оборот на первом периоде,то S1 = So + D1 и так далее. Тогда знаменатель среднего можно написать так:

So/2
+ So + D1
+ So + D1 + D2
+ So + D1 + D2 + D3
...
+ So/2 + D1/2 + D2/2 + D3/2 + ... + Dn/2 =

= So*n + D1*(n-1/2) + D2*(n-1/2-1) + D3*(n-1/2-2) + ... + Dn*(1/2) =

= So*n + Сумма по i=1,n Di*(n+1/2-i).

Разделив на n, получим

S`= (So/2 + S1 + S2 + S3 + ... + Sn/2) / n = So + Сумма по i=1,n Di*(n+1/2-i)/n.

В итоге запрос должен выглядеть так:

ВЫБРАТЬ
    Номенклатура,
    СУММА(ВЫБОР КОГДА Период = &НачалоПериода ТОГДА КоличествоНачальныйОстаток ИНАЧЕ 0 КОНЕЦ + КоличествоОборот * (РАЗНОСТЬДАТ(Период, 

&КонецПериода, ДЕНЬ) + 0.5) / (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) + 1)) КАК СреднийЗапас
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , )
СГРУППИРОВАТЬ ПО
    Номенклатура
Показать


Конечно, желательно все еще раз проверить и протестировать на проверяемых вручную данных.
json; bookmanyak; loOw; GOshaSaveiko; rumik007; kuzyara; +6 Ответить
14. MustDieff 09.11.11 20:57 Сейчас в теме
ТаблицаДнейПериода = Новый ТаблицаЗначений;
ТаблицаДнейПериода.Колонки.Добавить("Период");
мДата = ДатаНачалаОтчета;
Для К = 1 По КоличествоДнейПериода Цикл
   СтрокаПериода = ТаблицаДнейПериода.Добавить();
   СтрокаПериода.Период = мДата;
   мДата = мДата + 86400;
КонецЦикла;


Помещай во временную таблицу, и левым соединением по периоду цепляй к ней остатки из регистра.
sneikerj; +1 Ответить
16. пользователь 03.09.14 22:09
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот