Можно запросом находить средние закупочные цены?

1. dimao 17.05.21 10:43 Сейчас в теме
Добрый день. Есть необходимость получить средние закупочные цены товаров. Хотелка такая: на подразделение поступили товары (может быть давно, а может и в текущем месяце) требуется найти среднюю цену за месяц поступления. например, икра поступала 3 месяца назад. Нужна средняя цена за месяц поступления. Понятно, что есть нюансы, например: поступила в начале месяца. Тогда период 30 дней. Пытаюсь сделать запрос, но получается очень ресурсоемко. Может поможете разобраться?
ВЫБРАТЬ
	Склады.Ссылка КАК Склад,
	Склады.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ СкладПодразделение
ИЗ
	Справочник.Склады КАК Склады
ГДЕ
	ПОДСТРОКА(Склады.Наименование, 1, 4) = "S003"   //выбрать только подразделения, а не центральный офис
	И НЕ Склады.ПодразделениеОрганизации.крпЗакрыто  // наш внутренний признак закрытия подразделения
//	И Склады.ПодразделениеОрганизации В(&Подразделение)
;

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) КАК Дата,
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
	ПоступлениеТоваровУслуг.Контрагент КАК Контрагент
ПОМЕСТИТЬ ДатаПоследнееПоступление
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
ГДЕ
	ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
	И ПоступлениеТоваровУслугТовары.Сумма > 0
	И ПоступлениеТоваровУслугТовары.Количество > 0
//	И ПоступлениеТоваровУслуг.ПодразделениеОрганизации В(&Подразделение)
//	И ПоступлениеТоваровУслуг.Контрагент = &Контрагент

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
	ПоступлениеТоваровУслугТовары.Номенклатура,
	ПоступлениеТоваровУслуг.Контрагент
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Цены.Подразделение КАК Подразделение,
	ВТ_Цены.Номенклатура КАК Номенклатура,
	ВТ_Цены.Контрагент КАК Контрагент,
	ВТ_Цены.Количество КАК Количество,
	ВТ_Цены.Цена КАК Цена,
	ВТ_Цены.Сумма КАК Сумма,
	ВТ_Цены.СуммаНДС КАК СуммаНДС,
	ВТ_Цены.Дата КАК Дата,
	СРЕДНЕЕ(ВТ_Цены.Цена1) КАК Цена1
ИЗ
	ВТ_Цены КАК ВТ_Цены

СГРУППИРОВАТЬ ПО
	ВТ_Цены.Подразделение,
	ВТ_Цены.Номенклатура,
	ВТ_Цены.Контрагент,
	ВТ_Цены.Количество,
	ВТ_Цены.Цена,
	ВТ_Цены.Сумма,
	ВТ_Цены.СуммаНДС,
	ВТ_Цены.Дата
Показать


понятно, что запрос долгий. Когда ограничен список товаров, подразделений и поставщиков - все выполняется за приемлемое время, но если все товары-поставщики даже для одного подразделения - вылетает по расходованию памяти за раз. Как выйти из моего затруднения? тут есть идея создать регистр средних цен на конец месяца А может и дня даже. Заполнять его при проведении поступлений. Об этом тоже думаю.
Найденные решения
12. dimao 27.05.21 09:10 Сейчас в теме
(11) Решился сделать самую правильную вещь: стер начисто весь запрос и, с карандашом и рекомендациями наперевес, нарисовал новый. Похоже он делает то, что нужно! и делает достаточно быстро. Впредь мне урок - надо не заплатки ставить, а просто взять и переделать.
ВЫБРАТЬ
	Склады.Ссылка КАК Склад,
	Склады.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ СкладПодразделение
ИЗ
	Справочник.Склады КАК Склады
ГДЕ
	ПОДСТРОКА(Склады.Наименование, 1, 4) = "S003"
	И НЕ Склады.ПодразделениеОрганизации.крпЗакрыто
{ГДЕ
	(Склады.ПодразделениеОрганизации В (&Подразделение))}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ Товары
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	ПОДСТРОКА(Номенклатура.Код, 1, 1) = "1"
{ГДЕ
	(Номенклатура.Ссылка В (&Номенклатура))}
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоследнееПоступление
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ПоступлениеТоваровУслугТовары.Номенклатура)
ГДЕ
	ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
	И ПОДСТРОКА(ПоступлениеТоваровУслуг.Склад.Наименование, 1, 4) = "S001"
	И ПоступлениеТоваровУслугТовары.Сумма > 0
	И ПоступлениеТоваровУслугТовары.Количество > 0
{ГДЕ
	(ПоступлениеТоваровУслуг.ПодразделениеОрганизации В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
	ПеремещениеТоваров.ПодразделениеПолучатель КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступлениеИзПеремещения
ИЗ
	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
			ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
			ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ПО (ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПеремещениеТоваров.ПодразделениеПолучатель)
			И (ПодразделениеТовар.Товар = ПеремещениеТоваровТовары.Номенклатура)
ГДЕ
	ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации
	И ПеремещениеТоваровТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
	И ПОДСТРОКА(ПеремещениеТоваров.СкладПолучатель.Наименование, 1, 4) = "S001"
	И ПеремещениеТоваров.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ПеремещениеТоваров.Проведен
	И ПеремещениеТоваров.Дата >= ПоступлениеТоваровУслуг.Дата
	И ПеремещениеТоваровТовары.Количество > 0
{ГДЕ
	(ПеремещениеТоваров.ПодразделениеПолучатель В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоследнееПоступление.Ссылка КАК Ссылка,
	ПоследнееПоступление.Подразделение КАК Подразделение,
	ПоследнееПоступление.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступленияПеремещения
ИЗ
	ПоследнееПоступление КАК ПоследнееПоступление

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПоступлениеИзПеремещения.Ссылка,
	ПоступлениеИзПеремещения.Подразделение,
	ПоступлениеИзПеремещения.Номенклатура
ИЗ
	ПоступлениеИзПеремещения КАК ПоступлениеИзПеремещения
;

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура

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

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	СРЕДНЕЕ(ВЫБОР
			КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС
				ТОГДА ПоступлениеТоваровУслугТовары.Цена
			КОГДА НЕ ПоступлениеТоваровУслуг.СуммаВключаетНДС
					И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
				ТОГДА (ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК СрЦена,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_СрЦены
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПоступленияПеремещения КАК ДатыПоступленияПеремещения
		ПО (НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДатыПоступленияПеремещения.Дата, МЕСЯЦ, -1), ДЕНЬ) <= ПоступлениеТоваровУслуг.Дата)
			И (КОНЕЦПЕРИОДА(ДатыПоступленияПеремещения.Дата, ДЕНЬ) >= ПоступлениеТоваровУслуг.Дата)
			И (ДатыПоступленияПеремещения.Подразделение = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ПоступлениеТоваровУслугТовары.Номенклатура = ДатыПоступленияПеремещения.Номенклатура)

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
	ПоступлениеТоваровУслугТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ДатаПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка) КАК Ссылка
ПОМЕСТИТЬ ПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатаПоследниеПродажи КАК ДатаПоследниеПродажи
		ПО (ДатаПоследниеПродажи.Дата = ОтчетОРозничныхПродажах.Дата)
			И (ДатаПоследниеПродажи.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ДатаПоследниеПродажи.Номенклатура = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ПоследниеПродажи.Подразделение,
	ПоследниеПродажи.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК Количество,
	СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Продажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ГДЕ
	ОтчетОРозничныхПродажах.Дата МЕЖДУ &д1 И КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажах.Проведен
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ХозрасчетныйОстатки.Подразделение КАК Подразделение,
	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
	ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&д2, ДЕНЬ), СЕКУНДА, 1),
			Счет = &СчетОстатков,
			,
			ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S001"
				ИЛИ ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S003" {(Субконто1 = &Номенклатура), (Подразделение = &Подразделение)}) КАК ХозрасчетныйОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодразделениеТовар.Подразделение КАК Подразделение,
	ПоследнееПоступлениеПеремещение.Ссылка КАК ДокументПоступления,
	ПоследнееПоступлениеПеремещение.Ссылка.Контрагент КАК Поставщик,
	ПодразделениеТовар.Товар.Код КАК Код,
	ПодразделениеТовар.Товар КАК Товар,
	ВЫБОР
		КОГДА ПоследнееПоступлениеПеремещение.Ссылка.СуммаВключаетНДС
			ТОГДА ПоступлениеТоваровУслугТовары.Цена
		КОГДА НЕ ПоследнееПоступлениеПеремещение.Ссылка.СуммаВключаетНДС
				И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
			ТОГДА (ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество
		ИНАЧЕ 0
	КОНЕЦ КАК ЦенаПоследнегоПоступления,
	ЦенаПоследнейПродажи.ЦенаРозница КАК ЦенаРозница,
	Продажи.Количество КАК КоличествоПродаж,
	Продажи.Сумма КАК СуммаПродажВРозничныхЦенах,
	Продажи.Количество * ВТ_СрЦены.СрЦена КАК СуммаПродажВСреднихЦенахПоступления,
	Остатки.КоличествоОстаток КАК КоличествоОстаток,
	Остатки.КоличествоОстаток * ВТ_СрЦены.СрЦена КАК СуммаОстаткаВСреднихЦенахПоступления,
	ВТ_СрЦены.СрЦена КАК СредняяЦенаПоступления,
	ВЫБОР
		КОГДА НЕ Продажи.Количество = 0
			ТОГДА Продажи.Сумма / Продажи.Количество
		ИНАЧЕ 0
	КОНЕЦ КАК СредняяЦенаПродажиЗаПериод
ИЗ
	ПодразделениеТовар КАК ПодразделениеТовар
		ЛЕВОЕ СОЕДИНЕНИЕ ПоследнееПоступлениеПеремещение КАК ПоследнееПоступлениеПеремещение
		ПО ПодразделениеТовар.Подразделение = ПоследнееПоступлениеПеремещение.Подразделение
			И ПодразделениеТовар.Товар = ПоследнееПоступлениеПеремещение.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО (ПоследнееПоступлениеПеремещение.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка)
			И ПодразделениеТовар.Товар = ПоступлениеТоваровУслугТовары.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрЦены КАК ВТ_СрЦены
		ПО ПодразделениеТовар.Подразделение = ВТ_СрЦены.Подразделение
			И ПодразделениеТовар.Товар = ВТ_СрЦены.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ПоследниеПродажи КАК ПоследниеПродажи
		ПО ПодразделениеТовар.Подразделение = ПоследниеПродажи.Подразделение
			И ПодразделениеТовар.Товар = ПоследниеПродажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ЦенаПоследнейПродажи КАК ЦенаПоследнейПродажи
		ПО ПодразделениеТовар.Подразделение = ЦенаПоследнейПродажи.Подразделение
			И ПодразделениеТовар.Товар = ЦенаПоследнейПродажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
		ПО ПодразделениеТовар.Подразделение = Продажи.Подразделение
			И ПодразделениеТовар.Товар = Продажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО ПодразделениеТовар.Подразделение = Остатки.Подразделение
			И ПодразделениеТовар.Товар = Остатки.Номенклатура
{ГДЕ
	(ПоследнееПоступлениеПеремещение.Ссылка.Контрагент = &Контрагент)}

УПОРЯДОЧИТЬ ПО
	Подразделение,
	Код
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. azmon 1 17.05.21 10:53 Сейчас в теме
(1)
ГДЕ
ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
И ПоступлениеТоваровУслугТовары.Сумма > 0
И ПоступлениеТоваровУслугТовары.Количество > 0


В целях оптимизации запроса вот это лучше перенести в условия соединения таблиц
4. dimao 17.05.21 11:00 Сейчас в теме
(2)не, это тут и должно быть. Именно при получении даты последней поставки до даты конца периода отчета.
11. dimao 25.05.21 12:24 Сейчас в теме
ВОт плоды моих раздумий:
ВЫБРАТЬ
	Склады.Ссылка КАК Склад,
	Склады.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ СкладПодразделение
ИЗ
	Справочник.Склады КАК Склады
ГДЕ
	ПОДСТРОКА(Склады.Наименование, 1, 4) = "S003"
	И НЕ Склады.ПодразделениеОрганизации.крпЗакрыто
{ГДЕ
	(Склады.ПодразделениеОрганизации В (&Подразделение))}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ Товары
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	ПОДСТРОКА(Номенклатура.Код, 1, 1) = "1"
{ГДЕ
	(Номенклатура.Ссылка В (&Номенклатура))}
;

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

ИНДЕКСИРОВАТЬ ПО
	Подразделение,
	Товар
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоследнееПоступление
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ПоступлениеТоваровУслугТовары.Номенклатура)
ГДЕ
	ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
	И ПОДСТРОКА(ПоступлениеТоваровУслуг.Склад.Наименование, 1, 4) = "S001"
	И ПоступлениеТоваровУслугТовары.Сумма > 0
	И ПоступлениеТоваровУслугТовары.Количество > 0
{ГДЕ
	(ПоступлениеТоваровУслуг.ПодразделениеОрганизации В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
	ПеремещениеТоваров.ПодразделениеПолучатель КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступлениеИзПеремещения
ИЗ
	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
			ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
			ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ПО (ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПеремещениеТоваров.ПодразделениеПолучатель)
			И (ПодразделениеТовар.Товар = ПеремещениеТоваровТовары.Номенклатура)
ГДЕ
	ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации
	И ПеремещениеТоваровТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
	И ПОДСТРОКА(ПеремещениеТоваров.СкладПолучатель.Наименование, 1, 4) = "S001"
	И ПеремещениеТоваров.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ПеремещениеТоваров.Проведен
																	 
	И ПеремещениеТоваров.Дата >= ПоступлениеТоваровУслуг.Дата
	И ПеремещениеТоваровТовары.Количество > 0
{ГДЕ
	(ПеремещениеТоваров.ПодразделениеПолучатель В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоследнееПоступление.Ссылка КАК Ссылка,
	ПоследнееПоступление.Подразделение КАК Подразделение,
	ПоследнееПоступление.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступленияПеремещения
ИЗ
	ПоследнееПоступление КАК ПоследнееПоступление

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПоступлениеИзПеремещения.Ссылка,
	ПоступлениеИзПеремещения.Подразделение,
	ПоступлениеИзПеремещения.Номенклатура
ИЗ
	ПоступлениеИзПеремещения КАК ПоступлениеИзПеремещения
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ПоследнееПоступление
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ПоступлениеИзПеремещения
;

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
																								 
	ПоследнееПоступлениеПеремещение.Подразделение КАК Подразделение,
	ПоследнееПоступлениеПеремещение.Номенклатура КАК Номенклатура,
	СРЕДНЕЕ(ВложенныйЗапрос.Цена) КАК СрЦена
																							 
																				  
																																																													 
												   
ПОМЕСТИТЬ ВТ_СрЦены
ИЗ
	ПоследнееПоступлениеПеремещение КАК ПоследнееПоступлениеПеремещение
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоследнееПоступлениеПеремещение.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПоступлениеТоваровУслугТовары.Номенклатура КАК Товар,
			ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
			ПоступлениеТоваровУслуг.Дата КАК Дата,
			ВЫБОР
				КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС
					ТОГДА ПоступлениеТоваровУслугТовары.Цена
				КОГДА НЕ ПоступлениеТоваровУслуг.СуммаВключаетНДС
						И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
					ТОГДА (ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество
				ИНАЧЕ 0
			КОНЕЦ КАК Цена
		ИЗ
			Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
				ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ГДЕ
			ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
			И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
			И НЕ ПоступлениеТоваровУслугТовары.Сумма = 0
		{ГДЕ
			(ПоступлениеТоваровУслуг.Ссылка.Контрагент = &Контрагент),
			(ПоступлениеТоваровУслуг.ПодразделениеОрганизации В (&Подразделение)),
			(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура))}) КАК ВложенныйЗапрос
		ПО (ВложенныйЗапрос.ПодразделениеОрганизации = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ВложенныйЗапрос.Товар = ПоследнееПоступлениеПеремещение.Номенклатура)
			И (ВложенныйЗапрос.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(ПоступлениеТоваровУслуг.Дата, МЕСЯЦ, -1) И ПоступлениеТоваровУслуг.Дата)
																					

СГРУППИРОВАТЬ ПО
																			 
	ПоследнееПоступлениеПеремещение.Подразделение,
	ПоследнееПоступлениеПеремещение.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодразделениеТовар.Подразделение КАК Подразделение,
	ПоследнееПоступлениеПеремещение.Ссылка КАК ДокументПоступления,
	ПодразделениеТовар.Товар КАК Товар,
	ЦенаПоступленияСП.СрЦена КАК ЦенаПоступления
ПОМЕСТИТЬ ВТ111
ИЗ
	ПодразделениеТовар КАК ПодразделениеТовар
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрЦены КАК ЦенаПоступленияСП
		ПО ПодразделениеТовар.Подразделение = ЦенаПоступленияСП.Подразделение
			И ПодразделениеТовар.Товар = ЦенаПоступленияСП.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ПоследнееПоступлениеПеремещение КАК ПоследнееПоступлениеПеремещение
		ПО ПодразделениеТовар.Подразделение = ПоследнееПоступлениеПеремещение.Подразделение
			И ПодразделениеТовар.Товар = ПоследнееПоступлениеПеремещение.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ДатыПоступленияПеремещения
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ПоследнееПоступлениеПеремещение
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТ_СрЦены
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ДатаПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка) КАК Ссылка
ПОМЕСТИТЬ ПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатаПоследниеПродажи КАК ДатаПоследниеПродажи
		ПО (ДатаПоследниеПродажи.Дата = ОтчетОРозничныхПродажах.Дата)
			И (ДатаПоследниеПродажи.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ДатаПоследниеПродажи.Номенклатура = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ПоследниеПродажи.Подразделение,
	ПоследниеПродажи.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ111.Подразделение КАК Подразделение,
	ВТ111.ДокументПоступления КАК ДокументПоступления,
	ВТ111.Товар КАК Товар,
	ВТ111.ЦенаПоступления КАК ЦенаПоступления,
	ЦенаПоследнейПродажи.ЦенаРозница КАК ЦенаРозница
ПОМЕСТИТЬ ВТ222
ИЗ
	ВТ111 КАК ВТ111
		ЛЕВОЕ СОЕДИНЕНИЕ ЦенаПоследнейПродажи КАК ЦенаПоследнейПродажи
		ПО ВТ111.Подразделение = ЦенаПоследнейПродажи.Подразделение
			И ВТ111.Товар = ЦенаПоследнейПродажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ВТ111.ДокументПоступления = ПоступлениеТоваровУслуг.Ссылка
{ГДЕ
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ДатаПоследниеПродажи
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ПоследниеПродажи
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ЦенаПоследнейПродажи
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК Количество,
	СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Продажи1
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ГДЕ
	ОтчетОРозничныхПродажах.Дата МЕЖДУ &д1 И КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажах.Проведен
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ222.Подразделение КАК Подразделение,
	ВТ222.ДокументПоступления КАК ДокументПоступления,
	ВТ222.Товар КАК Товар,
	ВТ222.ЦенаПоступления КАК ЦенаПоступления,
	ВТ222.ЦенаРозница КАК ЦенаРозница,
	Продажи1.Количество КАК ПродажиКоличество1,
	Продажи1.Сумма КАК ПродажиСумма1,
	ВТ222.ЦенаПоступления * Продажи1.Количество КАК СуммаПоЗакупке1,
	ВЫБОР
		КОГДА НЕ Продажи1.Количество = 0
			ТОГДА Продажи1.Сумма / Продажи1.Количество
		ИНАЧЕ 0
	КОНЕЦ КАК СрЦенаПродажи
ПОМЕСТИТЬ ВТ333
ИЗ
	ВТ222 КАК ВТ222
		ЛЕВОЕ СОЕДИНЕНИЕ Продажи1 КАК Продажи1
		ПО ВТ222.Подразделение = Продажи1.Подразделение
			И ВТ222.Товар = Продажи1.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ333.Подразделение КАК Подразделение,
	ВТ333.ДокументПоступления КАК ДокументПоступления,
	ВТ333.Товар КАК Товар,
	ВТ333.ЦенаПоступления КАК ЦенаПоступления,
	ВТ333.ЦенаРозница КАК ЦенаРозница,
	ВТ333.ПродажиКоличество1 КАК ПродажиКоличество1,
	ВТ333.ПродажиСумма1 КАК ПродажиСумма1,
	ВТ333.СуммаПоЗакупке1 КАК СуммаПоЗакупке1,
	ВТ333.СрЦенаПродажи КАК СрЦенаПродажи,
	ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток
ПОМЕСТИТЬ ВТ444
ИЗ
	ВТ333 КАК ВТ333
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ХозрасчетныйОстатки.Подразделение КАК Подразделение,
			ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
			ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоОстаток
		ИЗ
			РегистрБухгалтерии.Хозрасчетный.Остатки(
					ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&д2, ДЕНЬ), СЕКУНДА, 1),
					Счет = &СчетОстатков,
					,
					ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S001"
						ИЛИ ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S003") КАК ХозрасчетныйОстатки) КАК ВложенныйЗапрос
		ПО ВТ333.Подразделение = ВложенныйЗапрос.Подразделение
			И ВТ333.Товар = ВложенныйЗапрос.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТ222
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ Продажи1
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТ333
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВТ444.Подразделение КАК Подразделение,
	ВТ444.ДокументПоступления КАК ДокументПоступления,
	ВТ444.ДокументПоступления.Контрагент КАК Поставщик,
	ВТ444.Товар КАК Товар,
	ВТ444.Товар.Код КАК ТоварКод,
	ВЫРАЗИТЬ(ВТ444.ЦенаПоступления КАК ЧИСЛО(15, 2)) КАК ЦенаПоступления,
	ВЫРАЗИТЬ(ВТ444.ЦенаРозница КАК ЧИСЛО(15, 2)) КАК ЦенаРозница,
	ВТ444.ПродажиКоличество1 КАК ПродажиКоличество,
	ВЫРАЗИТЬ(ВТ444.ПродажиСумма1 КАК ЧИСЛО(15, 2)) КАК ПродажиСумма,
	ВЫРАЗИТЬ(ВТ444.СуммаПоЗакупке1 КАК ЧИСЛО(15, 2)) КАК СуммаПоЗакупке,
	ЕСТЬNULL(ВТ444.КоличествоОстаток, 0) + ЕСТЬNULL(ВЗ_НеПроведенные.Количество, 0) КАК КоличествоОстаток,
	ВТ444.СрЦенаПродажи КАК СрЦенаПродажи,
																							 
	ЕСТЬNULL(ВЗ_НеПроведенные.Количество, 0) КАК КоличествоНепроведенных
ИЗ
	ВТ444 КАК ВТ444
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
			ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
			СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество
		ИЗ
			Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
				ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
				ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ГДЕ
			НЕ ПоступлениеТоваровУслуг.Проведен
			И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
			И ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
		
		СГРУППИРОВАТЬ ПО
			ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
			ПоступлениеТоваровУслугТовары.Номенклатура) КАК ВЗ_НеПроведенные
   
		ПО ВТ444.Подразделение = ВЗ_НеПроведенные.ПодразделениеОрганизации
			И ВТ444.Товар = ВЗ_НеПроведенные.Номенклатура
{ГДЕ
	(ВТ444.ДокументПоступления.Контрагент = &Контрагент)}
Показать


Отчет очень долгий. На нашем старом сервачке делается почти час. Но получает среднюю цену закупки за месяц перед последним поступлением товара (независимо от начала периода отчета). Задача: получить по каждому подразделению список товаров, последнего поставщика, закупочную цену и розничную. За период отчета продажи в розничных ценах и в закупочных, типа показать наценку.
может кому-то пригодится, может быть кто-то из чувства сострадания ;-) подскажет, как оптимизировать запрос?
пробовал использовать бух.регистры, но там встречаются интересности пока период не закрыт и документы не перепроведены.
12. dimao 27.05.21 09:10 Сейчас в теме
(11) Решился сделать самую правильную вещь: стер начисто весь запрос и, с карандашом и рекомендациями наперевес, нарисовал новый. Похоже он делает то, что нужно! и делает достаточно быстро. Впредь мне урок - надо не заплатки ставить, а просто взять и переделать.
ВЫБРАТЬ
	Склады.Ссылка КАК Склад,
	Склады.ПодразделениеОрганизации КАК Подразделение
ПОМЕСТИТЬ СкладПодразделение
ИЗ
	Справочник.Склады КАК Склады
ГДЕ
	ПОДСТРОКА(Склады.Наименование, 1, 4) = "S003"
	И НЕ Склады.ПодразделениеОрганизации.крпЗакрыто
{ГДЕ
	(Склады.ПодразделениеОрганизации В (&Подразделение))}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ Товары
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	ПОДСТРОКА(Номенклатура.Код, 1, 1) = "1"
{ГДЕ
	(Номенклатура.Ссылка В (&Номенклатура))}
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоследнееПоступление
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ПоступлениеТоваровУслугТовары.Номенклатура)
ГДЕ
	ПоступлениеТоваровУслуг.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
	И ПОДСТРОКА(ПоступлениеТоваровУслуг.Склад.Наименование, 1, 4) = "S001"
	И ПоступлениеТоваровУслугТовары.Сумма > 0
	И ПоступлениеТоваровУслугТовары.Количество > 0
{ГДЕ
	(ПоступлениеТоваровУслуг.ПодразделениеОрганизации В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
	ПеремещениеТоваров.ПодразделениеПолучатель КАК Подразделение,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступлениеИзПеремещения
ИЗ
	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
			ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
			ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
		ПО (ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ПеремещениеТоваров.ПодразделениеПолучатель)
			И (ПодразделениеТовар.Товар = ПеремещениеТоваровТовары.Номенклатура)
ГДЕ
	ПеремещениеТоваров.ПодразделениеОтправитель = ПоступлениеТоваровУслуг.ПодразделениеОрганизации
	И ПеремещениеТоваровТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
	И ПОДСТРОКА(ПеремещениеТоваров.СкладПолучатель.Наименование, 1, 4) = "S001"
	И ПеремещениеТоваров.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ПеремещениеТоваров.Проведен
	И ПеремещениеТоваров.Дата >= ПоступлениеТоваровУслуг.Дата
	И ПеремещениеТоваровТовары.Количество > 0
{ГДЕ
	(ПеремещениеТоваров.ПодразделениеПолучатель В (&Подразделение)),
	(ПоступлениеТоваровУслугТовары.Номенклатура В (&Номенклатура)),
	(ПоступлениеТоваровУслуг.Контрагент = &Контрагент)}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоследнееПоступление.Ссылка КАК Ссылка,
	ПоследнееПоступление.Подразделение КАК Подразделение,
	ПоследнееПоступление.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ПоступленияПеремещения
ИЗ
	ПоследнееПоступление КАК ПоследнееПоступление

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПоступлениеИзПеремещения.Ссылка,
	ПоступлениеИзПеремещения.Подразделение,
	ПоступлениеИзПеремещения.Номенклатура
ИЗ
	ПоступлениеИзПеремещения КАК ПоступлениеИзПеремещения
;

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура

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

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

СГРУППИРОВАТЬ ПО
	ПоступленияПеремещения.Подразделение,
	ПоступленияПеремещения.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации КАК Подразделение,
	СРЕДНЕЕ(ВЫБОР
			КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС
				ТОГДА ПоступлениеТоваровУслугТовары.Цена
			КОГДА НЕ ПоступлениеТоваровУслуг.СуммаВключаетНДС
					И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
				ТОГДА (ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество
			ИНАЧЕ 0
		КОНЕЦ) КАК СрЦена,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_СрЦены
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО ПоступлениеТоваровУслуг.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПоступленияПеремещения КАК ДатыПоступленияПеремещения
		ПО (НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДатыПоступленияПеремещения.Дата, МЕСЯЦ, -1), ДЕНЬ) <= ПоступлениеТоваровУслуг.Дата)
			И (КОНЕЦПЕРИОДА(ДатыПоступленияПеремещения.Дата, ДЕНЬ) >= ПоступлениеТоваровУслуг.Дата)
			И (ДатыПоступленияПеремещения.Подразделение = ПоступлениеТоваровУслуг.ПодразделениеОрганизации)
			И (ПоступлениеТоваровУслугТовары.Номенклатура = ДатыПоступленияПеремещения.Номенклатура)

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
	ПоступлениеТоваровУслугТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ДатаПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодразделениеТовар КАК ПодразделениеТовар
		ПО (ПодразделениеТовар.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ПодразделениеТовар.Товар = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ОтчетОРозничныхПродажах.Ссылка) КАК Ссылка
ПОМЕСТИТЬ ПоследниеПродажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатаПоследниеПродажи КАК ДатаПоследниеПродажи
		ПО (ДатаПоследниеПродажи.Дата = ОтчетОРозничныхПродажах.Дата)
			И (ДатаПоследниеПродажи.Подразделение = ОтчетОРозничныхПродажах.ПодразделениеОрганизации)
			И (ДатаПоследниеПродажи.Номенклатура = ОтчетОРозничныхПродажахТовары.Номенклатура)
ГДЕ
	ОтчетОРозничныхПродажах.Дата <= КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И ОтчетОРозничныхПродажах.Проведен
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажахТовары.Сумма > 0
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ПоследниеПродажи.Подразделение,
	ПоследниеПродажи.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации КАК Подразделение,
	ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
	СУММА(ОтчетОРозничныхПродажахТовары.Количество) КАК Количество,
	СУММА(ОтчетОРозничныхПродажахТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Продажи
ИЗ
	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах
		ПО ОтчетОРозничныхПродажахТовары.Ссылка = ОтчетОРозничныхПродажах.Ссылка
ГДЕ
	ОтчетОРозничныхПродажах.Дата МЕЖДУ &д1 И КОНЕЦПЕРИОДА(&д2, ДЕНЬ)
	И НЕ ОтчетОРозничныхПродажах.ПометкаУдаления
	И ОтчетОРозничныхПродажах.Проведен
{ГДЕ
	(ОтчетОРозничныхПродажах.ПодразделениеОрганизации В (&Подразделение)),
	(ОтчетОРозничныхПродажахТовары.Номенклатура В (&Номенклатура))}

СГРУППИРОВАТЬ ПО
	ОтчетОРозничныхПродажах.ПодразделениеОрганизации,
	ОтчетОРозничныхПродажахТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ХозрасчетныйОстатки.Подразделение КАК Подразделение,
	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
	ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&д2, ДЕНЬ), СЕКУНДА, 1),
			Счет = &СчетОстатков,
			,
			ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S001"
				ИЛИ ПОДСТРОКА(Субконто2.Наименование, 1, 4) = "S003" {(Субконто1 = &Номенклатура), (Подразделение = &Подразделение)}) КАК ХозрасчетныйОстатки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПодразделениеТовар.Подразделение КАК Подразделение,
	ПоследнееПоступлениеПеремещение.Ссылка КАК ДокументПоступления,
	ПоследнееПоступлениеПеремещение.Ссылка.Контрагент КАК Поставщик,
	ПодразделениеТовар.Товар.Код КАК Код,
	ПодразделениеТовар.Товар КАК Товар,
	ВЫБОР
		КОГДА ПоследнееПоступлениеПеремещение.Ссылка.СуммаВключаетНДС
			ТОГДА ПоступлениеТоваровУслугТовары.Цена
		КОГДА НЕ ПоследнееПоступлениеПеремещение.Ссылка.СуммаВключаетНДС
				И НЕ ПоступлениеТоваровУслугТовары.Количество = 0
			ТОГДА (ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС) / ПоступлениеТоваровУслугТовары.Количество
		ИНАЧЕ 0
	КОНЕЦ КАК ЦенаПоследнегоПоступления,
	ЦенаПоследнейПродажи.ЦенаРозница КАК ЦенаРозница,
	Продажи.Количество КАК КоличествоПродаж,
	Продажи.Сумма КАК СуммаПродажВРозничныхЦенах,
	Продажи.Количество * ВТ_СрЦены.СрЦена КАК СуммаПродажВСреднихЦенахПоступления,
	Остатки.КоличествоОстаток КАК КоличествоОстаток,
	Остатки.КоличествоОстаток * ВТ_СрЦены.СрЦена КАК СуммаОстаткаВСреднихЦенахПоступления,
	ВТ_СрЦены.СрЦена КАК СредняяЦенаПоступления,
	ВЫБОР
		КОГДА НЕ Продажи.Количество = 0
			ТОГДА Продажи.Сумма / Продажи.Количество
		ИНАЧЕ 0
	КОНЕЦ КАК СредняяЦенаПродажиЗаПериод
ИЗ
	ПодразделениеТовар КАК ПодразделениеТовар
		ЛЕВОЕ СОЕДИНЕНИЕ ПоследнееПоступлениеПеремещение КАК ПоследнееПоступлениеПеремещение
		ПО ПодразделениеТовар.Подразделение = ПоследнееПоступлениеПеремещение.Подразделение
			И ПодразделениеТовар.Товар = ПоследнееПоступлениеПеремещение.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО (ПоследнееПоступлениеПеремещение.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка)
			И ПодразделениеТовар.Товар = ПоступлениеТоваровУслугТовары.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрЦены КАК ВТ_СрЦены
		ПО ПодразделениеТовар.Подразделение = ВТ_СрЦены.Подразделение
			И ПодразделениеТовар.Товар = ВТ_СрЦены.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ПоследниеПродажи КАК ПоследниеПродажи
		ПО ПодразделениеТовар.Подразделение = ПоследниеПродажи.Подразделение
			И ПодразделениеТовар.Товар = ПоследниеПродажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ ЦенаПоследнейПродажи КАК ЦенаПоследнейПродажи
		ПО ПодразделениеТовар.Подразделение = ЦенаПоследнейПродажи.Подразделение
			И ПодразделениеТовар.Товар = ЦенаПоследнейПродажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
		ПО ПодразделениеТовар.Подразделение = Продажи.Подразделение
			И ПодразделениеТовар.Товар = Продажи.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
		ПО ПодразделениеТовар.Подразделение = Остатки.Подразделение
			И ПодразделениеТовар.Товар = Остатки.Номенклатура
{ГДЕ
	(ПоследнееПоступлениеПеремещение.Ссылка.Контрагент = &Контрагент)}

УПОРЯДОЧИТЬ ПО
	Подразделение,
	Код
Показать
3. soft_wind 17.05.21 10:57 Сейчас в теме
попробуйте использовать регистры накопления (обороты)
как раз за месяц получите все поступления
из регистров движений партий получите суммы поступления
суммы делите на обороты получаете средние цены
FatPanzer; dimao; azmon; +3 Ответить
5. dimao 17.05.21 11:20 Сейчас в теме
(3)
я думал над этим. Я не сказал, что вообще в постановку входит такое задание: поступлением товара считается еще и перемещение с другого подразделения. Тогда цена поступления берется с подразделения-источника. Коллективными усилиями сделан отчет, который получает таким способом цену последнего поступления ( даже с учетом перемещения с другого подразделения), но вот как получить среднюю за месяц - мозги уже кипят.
6. starik-2005 3039 17.05.21 11:32 Сейчас в теме
(5)
но вот как получить среднюю за месяц - мозги уже кипят
Так средняя - это сумма всего поступления, деленное на количество всего поступившего. Если не нужна реальная себестоимость, то просто весь приход получаешь и сумму его делишь на количество.
7. FatPanzer 17.05.21 11:32 Сейчас в теме
(5) Тогда вам просто надо поменять терминологию и забыть про цены. Начните оперировать движениями себестоимости.
8. dimao 17.05.21 11:38 Сейчас в теме
(7)Такая мысль была, но не хватает знаний ;-) подскажите чуть более подробно, где ее взять?
9. FatPanzer 17.05.21 11:43 Сейчас в теме
(8) Ээээ... У вас БП??? Ну тогда просто дебетовые обороты по нужным счетам (по 10-м материалам или по 40-м товарам) в разрезе необходимых субконто (или их составляющих)
10. dimao 17.05.21 15:16 Сейчас в теме
(9)Вот тут все и начинается. дата последнего поступления у всех позиций (поставщиков, подразделений) разная, поэтому период, за который нужно брать оборот (сумму и количество) в каждой строчке разный!
наверное это не алгоритмируется в рамках моих ограничений. Нужно писать какой-то модуль с хитрыми циклами.
Оставьте свое сообщение

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