Помогите с задвоением в запросе

1. Natali_77 10.09.19 10:26 Сейчас в теме
Здравствуйте! Может кто поможет с запросом, задваиваются результаты по характеристикам, по два раза выходят. Не пойму в чем дело.

Текст = 
		"ВЫБРАТЬ 
		|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,
		|	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
		|	ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаПоступление,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПоступлениеТоваровУслуг)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоПоступление,
		|	СУММА(ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
		|	СУММА(ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьНачальныйОстаток) КАК СтоимостьНачальныйОстаток,
		|	СУММА(ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
		|	СУММА(ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток) КАК СтоимостьКонечныйОстаток,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ОприходованиеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаОприходование,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ОприходованиеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоОприходование,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.СписаниеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаСписание,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.СписаниеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоСписание,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаПриходПеремещение,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоПриходПеремещение,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаРасходПеремещение,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ПеремещениеТоваров)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоРасходПеремещение,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ОтчетоРозничныхПродажах)
		|					ИЛИ ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
		|					ИЛИ ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ЧекККМ)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаПродажи,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ОтчетоРозничныхПродажах)
		|					ИЛИ ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
		|					ИЛИ ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ЧекККМ)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоПродажи,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ВозвратТоваровПоставщику)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаРасходВозвратПоставщику,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ВозвратТоваровПоставщику)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоРасходВозвратПоставщику,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ВозвратТоваровОтПокупателя)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК СуммаПриходВозвратПокупателя,
		|	СУММА(ВЫБОР
		|			КОГДА ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) = ТИП(Документ.ВозвратТоваровОтПокупателя)
		|				ТОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход
		|			ИНАЧЕ NULL
		|		КОНЕЦ) КАК КоличествоПриходВозвратПокупателя,
		|	Сумма(ВложенныйЗапрос.СтоимостьОборот) КАК СуммаПродажиРозница
		|ИЗ
		|	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатН, &ДатК,Регистратор , , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
		|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			ПродажиОбороты.Номенклатура КАК Номенклатура,
		|			ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|			ПродажиОбороты.Регистратор КАК Регистратор,
		|			Сумма(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот
		|		ИЗ
		|			РегистрНакопления.Продажи.Обороты(&ДатН, &ДатК,Регистратор, ) КАК ПродажиОбороты
		|		СГРУППИРОВАТЬ ПО
		|			ПродажиОбороты.Номенклатура,
		|			ПродажиОбороты.ХарактеристикаНоменклатуры,
		|			ПродажиОбороты.Регистратор) КАК ВложенныйЗапрос
		|		ПО ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор = ВложенныйЗапрос.Регистратор
		|			И ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура = ВложенныйЗапрос.Номенклатура
		|			И ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры = ВложенныйЗапрос.ХарактеристикаНоменклатуры
		|";
		ЕстьУсл=ложь;
		Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда
			ЕстьУсл=истина;
			Текст = Текст+" ГДЕ
			|	(ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура ";
			Если ПолеВидаСравненияНоменклатура = ВидСравнения.Равно Тогда
				Текст = Текст+"=";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеРавно Тогда
				Текст = Текст+"<>";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВСписке Тогда
				Текст = Текст+"В";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВСписке Тогда
				Текст = Текст+"НЕ В";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВИерархии Тогда
				Текст = Текст+"В ИЕРАРХИИ";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВИерархии Тогда
				Текст = Текст+"НЕ В ИЕРАРХИИ";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВСпискеПоИерархии Тогда
				Текст = Текст+"В ИЕРАРХИИ";
			ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НЕВСпискеПоИерархии Тогда
				Текст = Текст+"НЕ В ИЕРАРХИИ";
			КонецЕсли;
			
			Текст = Текст+" (&Владелец))";
		КонецЕсли;
		Если ЗначениеЗаполнено(ЭлементыФормы.Поставщик.Значение) Тогда
			Если ЕстьУсл тогда
				Текст = Текст+" И
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Контрагент = &Контрагент
				|";
			иначе
				Текст = Текст+" ГДЕ
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Контрагент = &Контрагент
				|";
			КонецЕсли;
			ЕстьУсл=истина;
		КонецЕсли;
		Если ЗначениеЗаполнено(ЭлементыФормы.Склад.Значение) Тогда
			Если ЕстьУсл тогда
				Текст = Текст+" И
				|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад = &Склад
				|";
			иначе
				Текст = Текст+" ГДЕ
				|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад = &Склад
				|";
			КонецЕсли;
			ЕстьУсл=истина;
		КонецЕсли;
		Если ЗначениеЗаполнено(ЭлементыФормы.ДатаНачПоступления.Значение) Тогда
			Если ЕстьУсл тогда
				Текст = Текст+" И
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата >= &ДатаН
				|";
			иначе
				Текст = Текст+" ГДЕ
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата >= &ДатаН
				|";
			КонецЕсли;
			ЕстьУсл=истина;
		КонецЕсли;
		Если ЗначениеЗаполнено(ЭлементыФормы.ДатаКонПоступления.Значение) Тогда
			Если ЕстьУсл тогда
				Текст = Текст+" И
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата <= &ДатаК
				|";
			иначе
				Текст = Текст+" ГДЕ
				|	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата <= &ДатаК
				|";
			КонецЕсли;
			ЕстьУсл=истина;
		КонецЕсли;
		
		Текст= Текст+"
		|СГРУППИРОВАТЬ ПО
		|	ПартииТоваровНаСкладахОстаткиИОбороты.Склад,
		|	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
		|	ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
		|УПОРЯДОЧИТЬ ПО
		|	Склад,
		|	Номенклатура,
		|	ХарактеристикаНоменклатуры
		|ИТОГИ ПО
		|	ОБЩИЕ,
		|	Склад,
		|	Номенклатура ИЕРАРХИЯ
		|АВТОУПОРЯДОЧИВАНИЕ";
Показать
user811769; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 10.09.19 10:35 Сейчас в теме
дело в шляпе
| СГРУППИРОВАТЬ ПО
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.ХарактеристикаНоменклатуры, 
3. PhoenixAOD 62 10.09.19 10:44 Сейчас в теме
Попробуй добавить вложенный запрос на характеристик, я на цены вот так получаю
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЕСТЬNULL(ВложенныйЗапрос.Характеристика, "") КАК Характеристика,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ПОМЕСТИТЬ ВтЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = ВложенныйЗапрос.Номенклатура.Ссылка
И ЦеныНоменклатурыСрезПоследних.Характеристика.Ссылка = ВложенныйЗапрос.Характеристика.Ссылка
Показать

задвоений нет
4. Natali_77 10.09.19 10:47 Сейчас в теме
(3)А можете написать как вы потом группируете результат?
5. PhoenixAOD 62 10.09.19 10:52 Сейчас в теме
(4)ну в моем случаи, потом получаю еще свободные остатки, товары в пути и в наличии, их соединяю по складу, номенклатуре и характеристие, а уже этот результат соединяю с ценами по номенклатуре и характеристикам, ну и группирую уже по складам
6. Nick_Angel 10.09.19 12:33 Сейчас в теме
ВЫБРАТЬ РАЗЛИЧНЫЕ - но это сработает только если есть две совершенно одинаковые записи - вторую исключит, а так лучше всего проверить запрос, может быть где-то неверная связь между таблицами?
7. Natali_77 10.09.19 13:20 Сейчас в теме
Сейчас переписала запрос. Получаю остатки из одного запроса и движения из вложенного запроса. Сейчас разбираюсь, так как кое где всё равно задваивает остатки. Но в основном верно выводит.
Оставьте свое сообщение

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