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

Программирование - Практика программирования

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Скачать файлы

Наименование Файл Версия Размер
Отчет, показывающий остаток на каждый день и средний запас по выбранной группе товаров
.erf 6,79Kb
22.07.12
100
.erf 6,79Kb 100 Скачать

См. также

Комментарии
1. Hany (Hany) 23.07.12 14:34 Сейчас в теме
Зачем вычислять таблицу ВсеПериоды, если в СКД можно указать дополнение по дням?
А также непонятно, зачем использовать регистр Продажи, если из него данные никакие не берутся.
2. Александр Кузнецов (devlabnn) 64 23.07.12 15:02 Сейчас в теме
(1) Hany, сразу скажу, что в СКД я не силен, но попробую ответить
>> Зачем вычислять таблицу ВсеПериоды, если в СКД можно указать дополнение по дням?
А СКД при этом расчитает остаток/цену/etc на этот период?
>> А также непонятно, зачем использовать регистр Продажи, если из него данные никакие не берутся
Из него какраз берутся периоды (предполагается, что продажи есть каждый день). Я не использую такой вариант, у меня всегда есть глобальная таблица с колонкой "период"
3. Hany (Hany) 23.07.12 16:30 Сейчас в теме
(2) devlabnn,

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


Ага.

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


В СКД такой проблемы б не было.
4. Сергей (ildarovich) 5208 25.07.12 18:02 Сейчас в теме
Декартаво произведение таблиц не требует соединения по условию "Истина". В запросе таблицы могут быть просто перечисляться через запятую.
На ту же тему есть публикации: Запрос по остаткам регистра накопления на каждый день и Расчет средних по периодам в запросе - это элементарно!. Запросы в них проще.
5. Александр Кузнецов (devlabnn) 64 26.07.12 18:31 Сейчас в теме
(4) ildarovich, согласен. Особенно Расчет средних по периоду в запросе для меня просто находка. Но этот метод не подошел бы для решения моей задачи - найти количество дней, когда остаток по данной номенклатуре/складу равнялся нулю (и затем рассчитать потери, по средней продаже, когда номенклатура была на складе). Что касается Запрос по остаткам регистра накопления на каждый день- работает значительно медленнее.
6. Алексей Ромашов (krund) 30.07.12 14:00 Сейчас в теме
7. Ловыгин Антон (wunderland) 200 11.12.14 15:16 Сейчас в теме
Может я чего то не понял, но результат в отчете не соответствует тому что на картинке.
На картинке колонка "Средний запас" - одна, а в отчете, который для скачивания, она повторяется для каждого "периода"
Оставьте свое сообщение