Остаток на каждый день, средний остаток

Наиболее быстрый способ выбрать остаток на любой период с любыми группировками.

На основе данного запроса можно:
— просто вывести остаток, себестоимость, цену на каждый день (или месяц, час, неделю и т. д.)
— рассчитать средний запас
— расчитать количество дней провала (сколько дней товара не было на складе)

Работает действительно быстро. Единственное условие — наличие в регистре продаж ежедневных записей.

Наиболее быстрый способ выбрать остаток на любой период с любыми группировками.

На основе данного запроса можно:

  • — просто вывести остаток, себестоимость, цену на каждый день (или месяц, час, неделю и т. д.)
  • — рассчитать средний запас
  • — расчитать количество дней провала (сколько дней товара не было на складе)

Работает действительно быстро. Единственное условие — наличие в регистре продаж ежедневных записей.

Приложен пример отчета.


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

ИНДЕКСИРОВАТЬ ПО
Период,
ТоварыНаСкладахОстаткиИОбороты.Склад,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Данные.Склад
ПОМЕСТИТЬ тСклады
ИЗ
Данные КАК Данные
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Данные.Номенклатура
ПОМЕСТИТЬ тНоменклатура
ИЗ
Данные КАК Данные
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Периоды.Период,
тНоменклатура.Номенклатура
ПОМЕСТИТЬ ВсеСтрокиНоменклатураПериод
ИЗ
Периоды КАК Периоды
ПОЛНОЕ СОЕДИНЕНИЕ тНоменклатура КАК тНоменклатура
ПО (ИСТИНА)
;

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

ИНДЕКСИРОВАТЬ ПО
Строки.Номенклатура,
Строки.Период,
тСклады.Склад
;

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

7 Comments

  1. Hany

    Зачем вычислять таблицу ВсеПериоды, если в СКД можно указать дополнение по дням?

    А также непонятно, зачем использовать регистр Продажи, если из него данные никакие не берутся.

    Reply
  2. devlabnn

    (1) Hany, сразу скажу, что в СКД я не силен, но попробую ответить

    >> Зачем вычислять таблицу ВсеПериоды, если в СКД можно указать дополнение по дням?

    А СКД при этом расчитает остаток/цену/etc на этот период?

    >> А также непонятно, зачем использовать регистр Продажи, если из него данные никакие не берутся

    Из него какраз берутся периоды (предполагается, что продажи есть каждый день). Я не использую такой вариант, у меня всегда есть глобальная таблица с колонкой «период»

    Reply
  3. Hany

    (2)

    А СКД при этом расчитает остаток/цену/etc на этот период?

    Ага.

    Я не использую такой вариант, у меня всегда есть глобальная таблица с колонкой «период»

    В СКД такой проблемы б не было.

    Reply
  4. ildarovich

    Декартаво произведение таблиц не требует соединения по условию «Истина». В запросе таблицы могут быть просто перечисляться через запятую.

    На ту же тему есть публикации: Запрос по остаткам регистра накопления на каждый день и Расчет средних по периодам в запросе — это элементарно!. Запросы в них проще.

    Reply
  5. devlabnn

    (4) ildarovich, согласен. Особенно Расчет средних по периоду в запросе для меня просто находка. Но этот метод не подошел бы для решения моей задачи — найти количество дней, когда остаток по данной номенклатуре/складу равнялся нулю (и затем рассчитать потери, по средней продаже, когда номенклатура была на складе). Что касается Запрос по остаткам регистра накопления на каждый день— работает значительно медленнее.

    Reply
  6. krund

    Неплохая разработка.

    Reply
  7. wunderland

    Может я чего то не понял, но результат в отчете не соответствует тому что на картинке.

    На картинке колонка «Средний запас» — одна, а в отчете, который для скачивания, она повторяется для каждого «периода»

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *