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 57 10.09.19 10:44 Сейчас в теме
Попробуй добавить вложенный запрос на характеристик, я на цены вот так получаю
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЕСТЬNULL(ВложенныйЗапрос.Характеристика, "") КАК Характеристика,
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ПОМЕСТИТЬ ВтЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = ВложенныйЗапрос.Номенклатура.Ссылка
И ЦеныНоменклатурыСрезПоследних.Характеристика.Ссылка = ВложенныйЗапрос.Характеристика.Ссылка
Показать

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

Вакансии


Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Владивосток
зарплата от 80 000 руб. до 120 000 руб.
Полный день